Платформа зенда: Каковы различия между init () и предварительной отправкой () функции в объектах контроллера?

Я думаю, что порядок выполнения является init (), предварительная отправка (), и затем действие () называют.

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

  2. Что происходит между init () и предварительной отправкой () вызовы функции?

28
задан understack 2 February 2010 в 08:49
поделиться

1 ответ

Сначала вызывается preDispatch () для экземпляров Zend_Controller_Plugin_Abstract . Здесь у вас есть объекты запроса и ответа, поэтому вы можете отфильтровать запрос или выполнить некоторую подготовку, используя информацию из запроса.

init () из Zend_Controller_Action вызывается следующим как часть конструктора. Он нужен для того, чтобы помочь вам инициализировать ваш контроллер, без необходимости переопределять и повторять подпись конструктора ( Zend_Controller_Action :: __ contruct () ).

Здесь вызывается метод контроллера preDispatch () . Вы можете вызвать $ request-> setDispatched (false) , чтобы пропустить текущее действие - не уверен, что вы можете сделать это в init ()

Затем вызывается ваш метод действия ( viewAction () например). Здесь вы выполняете свою обычную работу, например, извлекаете материал из модели и заполняете представление.

Итак, различие теперь должно быть ясным:

  • Если вы хотите, чтобы что-то выполнялось перед всеми действиями - поместите это в плагин и используйте один из хуков (помимо preDispatch () есть routeStartup и другие ),
  • , если вы хотите перед каждым действием в контроллере - init или preDispatch () ,
  • хотя бы на единичное действие - само действие.

Что происходит между вызовами функций init () и preDispatch () ?

Практически ничего - выполняется preDispatch () , и если у вас нет Не вызвал $ request-> setDispatched (false) , действие выполнено.

28
ответ дан 28 November 2019 в 03:37
поделиться
Другие вопросы по тегам:

Похожие вопросы: