ФорумПрограммированиеPHP для идиотов → Где вызывать декорировани, короче не знаю даже как тему назвать...

Где вызывать декорировани, короче не знаю даже как тему назвать...

  • artoodetoo

    Сообщения: 5147 Репутация: N Группа: в ухо

    Spritz Июнь 27, 2010, 7:38 д.п., спустя 3 минуты 47 секунд

    Согласен с тем, что верстальщика не надо грузить. НО, если мы перенесём форматирование данных в контроллер или модель, то вместо правки шаблонов нам придется править контроллер или модель. Это ещё хуже.

    Можно, конечно, выделить специальный слой форматирования, как ты предлагаешь. Я считаю этот слой относится к представлению.
    ιιlllιlllι унц-унц
  • master

    Сообщения: 3244 Репутация: N Группа: Джедаи

    Spritz Июнь 27, 2010, 8:20 д.п., спустя 41 минуту 47 секунд

    модель извлекает данные, её трогать не нужно. а контроллер … эээ… тут как бы немного путаница

    в паттерне MVC есть звено "контроллер" (C), которое содержит в себе роутер. а есть вызываемые роутером функции, которые не являются моделью. вот их часто называют контроллером, что в общем не всегда правильно.


        request
         ↓
    M <-> C <- V (template)
         ↓
       HTML

    вот эта схема неправильна
    не всё полезно, что в swap полезло
  • artoodetoo

    Сообщения: 5147 Репутация: N Группа: в ухо

    Spritz Июнь 27, 2010, 8:09 д.п., спустя 23 часа 49 минут 38 секунд

    Ну а где правильная схема? )))
    ιιlllιlllι унц-унц
  • master

    Сообщения: 3244 Репутация: N Группа: Джедаи

    Spritz Июнь 27, 2010, 8:20 д.п., спустя 11 минут

    почему неправильна? потому что в ней контроллер содержит два важны звена - роутер и функцию-пару для шаблона (шаблон подразумевает наличие функции, генерирующей для него данные, они идут парами всегда), которые явно не показаны.

    Вот правильно:


                request
                  ↓
                router
                ↓    ↓
    model ↔ action   template
              ↓       ↓
              templater
                 ↓
               HTML

    router - можно считать что это часть контроллера, templater - тоже можем считать что это часть контроллера.
    а то что навешивает разработчик - это action и template (иногда ещё модель). Так что action - это не контроллер, в смысле не ядро приложения. Вместо MVC более правильно использовать аббревиатуру RAMV (router - action - model - view), впрочем это я сам придумал для наглядности, так что не критично.
    action и template идут парой. и если мы выносим преобразование из template - мы обязаны внести его в action (и наоборот)
    не всё полезно, что в swap полезло
  • artoodetoo

    Сообщения: 5147 Репутация: N Группа: в ухо

    Spritz Июнь 27, 2010, 8:24 д.п., спустя 3 минуты 43 секунды

    Удержался от сарказма. Здесь есть логика. master, напиши развернутую статью про архитектуру запрос-хуйнанэ-ответ. С примерами.
    ιιlllιlllι унц-унц
  • master

    Сообщения: 3244 Репутация: N Группа: Джедаи

    Spritz Июнь 27, 2010, 8:41 д.п., спустя 17 минут 12 секунд

    хз что там писать. схемка же есть
    не всё полезно, что в swap полезло
  • kostyl

    Сообщения: 5210 Репутация: N Группа: Джедаи

    Spritz Июнь 27, 2010, 12:09 п.п., спустя 3 часа 27 минут 55 секунд

    потому что некоторые строки, которые ты будешь получать из базы, уже заэскейпены, и их эскейпить не надо

    в честь чего такая уверенность, я такой фигнёй не страдаю….
    master, ты в принципе правильно говоришь насчет работы, мне действительно удобнее писать, когда в шаблоне данные в уже нужном формате. Но это не правильно с точки зрения обязанностей. Все преобразования должны быть в представлении, по этому поводу даже паттерны есть соотвествующие Я же привел пример с датой. Ты что предлагаешь так писать:
    action::run()
    {
    $this->view->assign('data_without_year') = date('d m', $user->data);
    $this->view->assign('data_words') = date('j, n, Y', $user->data);
    }
    //view
    <?php echo $this->data_without_year ?>
    <?php echo $this->data_words ?>

    вместо
    action::run()
    {
    $this->view->assign('user', user);
    }
    //view
    <?php echo $this->dataHelper('d m', $this->user->data) ?>
    <?php echo $this->dataHelper('j, n, Y', $this->user->data) ?>

    Но вот для json, как говорит НРГ нужен некий prepare, который как я понял, сделает ту же работу что и представление. Это я думаю тоже как то тупо, два раза делать одно и то же. Короче фиг знает.
  • master

    Сообщения: 3244 Репутация: N Группа: Джедаи

    Spritz Июнь 27, 2010, 12:15 п.п., спустя 5 минут 49 секунд

    я такой фигнёй не страдаю

    никогда не прикручивал tinymce какой-нибудь?

    Ты что предлагаешь так писать

    да
    не всё полезно, что в swap полезло
  • phpdude

    Сообщения: 26646 Репутация: N Группа: в ухо

    Spritz Июнь 27, 2010, 12:20 п.п., спустя 5 минут 25 секунд

    да

    всегда писал в стиле втором, когда даные ескейптся в шаблоне, и совсем недавно понял, что правильнее их ескейпить в контроллере/модели так сказать, а не во вьюхе, по простой причине - будет проще сменить шаблон, не наделав ошибок :)

    возможно еще какую то логическую прокладку сделать типа

    мвц : мфвц - модель фильтр вью контроллер
    Сапожник без сапог
  • kostyl

    Сообщения: 5210 Репутация: N Группа: Джедаи

    Spritz Июнь 27, 2010, 12:31 п.п., спустя 10 минут 36 секунд

    возможно еще какую то логическую прокладку сделать типа
     мвц : мфвц - модель фильтр вью контроллер

    так я об этом и начал говорить, как и где именно она может вызваться. Может это вполне может принадлежать модели? например так:
        
    //а)

    public function __get($name)
    {
    $list($name, $demander) = explode('_', $name);
    $decorator = Decorator::findByDemender($demander);
    if ($decorator) {
    return $decorator->decorate($this->_data[$name]);
    }

    return $this->_data[$name];
    }

    $object->login_html;

    //б)
    public function __get($name)
    {
    return $this->getUniConverter($this->_data[$name]);
    }

    $object->login->asHtml();

    или это именно внешняя фигня или как?
  • artoodetoo

    Сообщения: 5147 Репутация: N Группа: в ухо

    Spritz Июнь 27, 2010, 12:32 п.п., спустя 1 минуту 24 секунды

    Давайте для ясности сосредоточимся на представлении даты и, imo, станет понятно где конфета, а где говно.
    Пусть я веду блог. Сейчас у меня дата выводится как 2010-06-25. Я решил поменять "тему", чтобы дата выводилась как каледарный листок. Для этого дата должна быть представлена как

    <span class="year">2010</span><span class="month">06</span<span class="day">25</span>

    Дальше CSS будет творить чудеса.
    Завтра я решу, что мне больше подходит выводить дату как "только что", "неделю назад", "очень давно", а при наведении курсора чтобы всплывал тайтл с конкретной датой. Должен ли я под новую тему переделывать модель или контроллер?

    Нет нах!

    Конечно, если на меня работает раб-верстальщик, я не хочу чтобы он был слишком умным и дорогим. Не надо грузить его лишними знаниями. Оптимальный выход, опять imo, выделить форматирование в отдельную секцию шаблона. И за эту секцию будет отвечать своей задницей программер
    ιιlllιlllι унц-унц
  • master

    Сообщения: 3244 Репутация: N Группа: Джедаи

    Spritz Июнь 27, 2010, 12:36 п.п., спустя 3 минуты 56 секунд

    artoodetoo,
    исправляешь action чтобы он передавал не один параметр, а три - месяц, год, день месяца, в шаблоне изменяешь
    <span class="date">{$date}</date>
    на
    <span class="year">{$year}</span><span class="month">{$month}</span<span class="day">{$day}</span>
    Спустя 50 сек.
    Должен ли я под новую тему переделывать модель или контроллер?

    модель - не обязательно, контроллер (точнее action) придётся
    не всё полезно, что в swap полезло
  • artoodetoo

    Сообщения: 5147 Репутация: N Группа: в ухо

    Spritz Июнь 27, 2010, 12:39 п.п., спустя 2 минуты 21 секунду

    твой "экшн" идет парой с шаблоном. значит фактически это часть шаблона, неважно в одном они файле ли в двух. это вполне согласуется с тем, что я написал. разница в названиях.
    ιιlllιlllι унц-унц
  • phpdude

    Сообщения: 26646 Репутация: N Группа: в ухо

    Spritz Июнь 27, 2010, 12:42 п.п., спустя 2 минуты 57 секунд

    в данной ситуации я за "избыточность", то есть контроллер должен давать вьюхе и дефолтный форматированый дат и таймстамп, чтобы моно было самому нахуячить :D
    Сапожник без сапог
  • kostyl

    Сообщения: 5210 Репутация: N Группа: Джедаи

    Spritz Июнь 27, 2010, 12:44 п.п., спустя 1 минуту 53 секунды

    дата датой, давайте про объект поговорим. Если передавать его в шаблон, то по версии master надо декорировать в объекте, а по версии artoodetoo в шаблоне. Где это делать? На сколько недопустимо делать это в объекте так как я показал выше?

Пожалуйста, авторизуйтесь, чтобы написать комментарий!