Является ли диспетчер в Zend Framework более или менее модулем внедрения зависимостей? - PullRequest
2 голосов
/ 04 января 2012

Как видно из этой диаграммы (с 15 по 24) диспетчер:Нажмите здесь для увеличения изображения.Zend Framework calls

Отправка имеет следующие шаги:

  • создание экземпляра контроллера (15)
    • preDispatch (помощнику) (17-18)
    • preDispatch (интерпретировать данные preDispatch?) (19)
    • действие (выполнить для результатов, основанных на данных preDispatch?) (20)
    • postDispatch (я не понимаю этого!?) (21)
    • postDispatch (помощнику, но зачем?) (22-23)
  • назад к диспетчеру (24)


  • На какую функциональность он ссылается, когда выполняется отправка, предварительная отправка, отправка?

  • Что такое функциональность диспетчера в Zend Framework?Это более или менее модуль внедрения зависимости?

1 Ответ

2 голосов
/ 04 января 2012

Эти методы отправки являются частью системы плагина Zend_Controller. Вы можете думать о них как о крючках.

В вашей начальной загрузке вы можете зарегистрировать плагины, которые выполняются во время одного или нескольких из этих событий. Например, если вы зарегистрируете плагин в Bootstrap, который содержит метод routeShutdown, Zend Framework выполнит этот метод routeShutdown вашего плагина во время routeShutdown.

Плагины могут быть запущены во время # 8-12 и # 26-28. Zend_Controller_Action также имеет методы pre / postDispatch (# 17 и # 22), которые вы можете использовать непосредственно в вашем контроллере, которые будут безоговорочно выполняться для каждого действия в этом контроллере.

Можно зарегистрировать плагины для различных событий в зависимости от того, где вы хотите, чтобы произошла определенная логика. Например, вы можете создать плагин для проверки, посещает ли пользователь сайт по https; и вы хотели бы, чтобы это выполнялось до того, как произойдет какая-либо логика приложения (контроллеры / действия), поэтому не имеет смысла проверять наличие https в postDispatch, потому что действие контроллера уже выполнило всю его логику и отразило выходные данные. Вместо этого вы хотели бы использовать routeShutdown, поскольку в этот момент модуль, контроллер и действие известны с момента маршрутизации.

В одном из моих приложений у меня есть плагин, который отображает, сколько запросов было выполнено, и примерно сколько времени потребовалось для генерации страницы с момента вызова index.php, поэтому у меня этот плагин последний раз запускался в dispatchLoopShutdown, так как запрос почти завершен. Оттуда я могу получить доступ к телу HTML, которое будет возвращено с ответом, и манипулировать им, чтобы включить информацию профиля.

Основы Zend Controller и Ссылки Dispatcher также должны помочь в дополнение к ссылкам plugins выше.

Надеюсь, это немного прояснило для вас.

...