singlepost

баг,фича или мой глюк? << На главную или назад  

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

public function detailAction(){
$this->view->idTab=$this->_request->getParam('idTab');
}

и в виде слудющее
//detai view
echo "blablabla";
print $this->action('addcomment', 'account', 'shop',array('idTab'=>$this->idTab));

дальше идем в экшн addcomment

public function addcommentAction(){
if(false){
$this->view->idTab=$this->_request->getParam('idTab');
}
}

и вид
//addcomment view
if(isset($this->idTab)){
echo "ЭТО БАГ ИЛИ ЧТО";
}

то есть переменные скрипта вида detail копируются полностью в скрипт вида addcomment….Как можно это убрать??
Заранее спасибо за помощь.

16 ответов в теме “баг,фича или мой глюк?”

  1. 15
    Сергей Соколов ответил:

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

  2. 14
    Андрей Васильев ответил:

    Вы оспариваете MVC. Возможно Вы просто о нем спрашивали, но когда отправили нас читать книги из-за того, что мы распинались и пытались объяснить Вам шаблон MVC – то это было слишком.

    Ладно, всякое бывает – возможно в чем-то неправы Вы, может в чем и я :)

    Но все-же думаю цель диалога достигнута :)

  3. 13
    Александр Крутов ответил:

    Чем же я пру?Говорите по факту а не претензиями

  4. 12
    Андрей Васильев ответил:

    MVC тоже не дураки придумали, так что уж лучше Вам почитать, а не нам. Это довольно стройная идеология, которая обеспечивает максимальную автономность ее трех составляющих. Причем контроллер, получает данные от пользователя и готовит их для модели и вида.

    Почитайте например, хотя бы вот это:

    //ru.wikipedia.org/wiki/Model-View-Controller
    и это
    //chtivo.webhost.ru/articles/mvc.php

    Тогда у Вас будет меньше глупых вопросов и раздражительных споров.

    Ничего личного :) Просто Вы прете против MVC, хотя состоите в клубе ZF программеров. Нелогично, верно?

  5. 11
    Александр Крутов ответил:

    Да блин)Вместо того чтобы спорить прочитайте Э. Гамма Р. Хелм Р. Джонсон Дж. Влиссидес "Приемы объектно-ориентированного проектирования.Патерны проектирования

  6. 10
    Андрей Васильев ответил:

    Контроллер существует для связки этих двух частей парадигмы MVC

  7. 9
    Александр Крутов ответил:

    Хорошо,ну допустим так.Значит вид для вывода,модель для бизнес логики,а зачем тогда контроллер?может он вообще лишний тогда

  8. 8
    Андрей Васильев ответил:

    Бизнес-логика – это логика проекта, а не чтение данных для последующего вывода – это уже результат работы бизнес-логики. В приведенном Вами примере бизнес-логикой занимается модель – именно она знает как и где вытащить данные

  9. 7
    Александр Крутов ответил:

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

  10. 6
    Сергей Соколов ответил:

    Многие думают что вид не может обращаться к модели, но это не верно. На самом деле парадигма MVC запрещает виду менять состояние модели (например сохранять записи), но читать из модели разрешается.

  11. 5
    Александр Крутов ответил:

    вот и я об этом сразу подумал…

  12. 4
    Pavel Makhnev ответил:

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

    MVC сам по себе не предполагает обращение вида в модель на прямую, разве нет?

  13. 3
    Сергей Соколов ответил:

    //framework.zend.com/manual/en/performance.view...
    Внизу страницы конкретно про помощник action() с примером.

    В двух словах: 1) action() требует очень много ресурсов для отработки поскольку клонирует много объектов 2) семантически, с точки зрения правильного API лучше обращаться из вида напрямую к модели. Для этого нужно чтобы всю необходимую информацию для отображения можно было получить из модели, не трогая контроллер.

  14. 2
    Александр Крутов ответил:

    > В принципе такой подход не рекомендуется самими разработчиками >ZF. Вместо него лучше использовать свой помощник вида, который >обратится к модели напрямую и отрендерит необходимый кусочек >верстки.

    если не затруднит дайте пример кода или линк на обоснование или реализацию этого

  15. 1
    Сергей Соколов ответил:

    Нет, это не баг. Дело в том, что помощник вида action() клонирует помощника действия viewRenderer() для использования в вызываемом действии. А помощник действия viewRenderer() уже автоматически инициализарован в вашем detailAction(), и в нем в свою очередь инициализарован вид с переменной $this->view->idTab. Соответственно этот же объект вида вместе с установленными переменными в результате клонирования viewRenderer используется и в действии addcommentAction().
    Из приведенного примера трудно понять, в чем необходимость использования action() в данном случае? В принципе такой подход не рекомендуется самими разработчиками ZF. Вместо него лучше использовать свой помощник вида, который обратится к модели напрямую и отрендерит необходимый кусочек верстки.

Клуб программистов работает уже ой-ой-ой сколько, а если поточнее, то с 2007 года.