2010-02-12 9 views
1

Я хочу выполнить некоторый код прямо перед визуализацией макета, после выполнения всего другого кода. Где я могу поставить этот код?Zend Framework - последний код для выполнения перед составлением макета

Я специально пытаюсь изменить файлы, упомянутые в помощниках headLink, headScript и inlineScript, прежде чем они будут использованы макетом.

Вот шаги, которые я хочу взять:

  1. Loop над файлами в этом просмотре хелперах
  2. Составьте список локальных файлов
  3. Удалить локальные файлы из видовых хелперов
  4. Ссылка на список локальных файлов в качестве параметра на серверный скрипт, который объединяет их для одного HTTP-запроса.
  5. Добавьте ссылку на новый скрипт компилятора на соответствующий помощник вида

Это не кажется, что Front Controller Plugin собирается помочь мне сделать это, и вот почему:

  1. postDispatch() запускается на выполнение после каждого действия контроллера, который выполнен, и мне нужен полный список таблиц стилей/JavaScripts
  2. dispatchLoopShutdown() запускается на выполнение после цикла действия контроллера, но расположение уже оказываемых в этой точке

Как предложил Руфинус, я решил это, распространив пояснителей. My question from that angle as well as the solution is here.

+0

вы Знаете, вы можете modfiy голову * в вашем контроле действий? например $ This-> view-> headScript() -> appendFile ('/ JS/whatever.js'); – Rufinus

+1

Да, я использую эту функцию. Я обновил свой пост, чтобы быть более конкретным. – Sonny

+0

ok теперь я знаю, что вы делаете. мое лучшее предложение заключается в расширении помощников вида. задействованный помощник вида, используя помощник представления контейнера-заполнителя. расширяя эти классы, вы должны делать то, что хотите. (но, честно говоря, я не вижу в этом большой пользы, было бы лучше, если бы вы использовали небольшой невесомый http-демон, такой как lighttpd, чтобы обслуживать только эти статические файлы. – Rufinus

ответ

13

ZF1 Dispatch Process Overview (c) by Thorsten Ruf

см Orginal PDF created by Thorsten Ruf (Mirror)

самая последняя часть, которую вы можете получить доступ с помощью плагина должен быть dispatchLoopShutdown

EDIT: Для ZendFramework2 см http://zendframework2.de/en/cheat-sheet.html или this gdoc

+0

Очень красивая диаграмма! Непонятно, как получить код для выполнения на этом этапе. Я обновил свой пост, чтобы уточнить, что я пытаюсь выполнить. – Sonny

+1

Oooh, nice. Мне жаль, что они не сделали это немного больше, хотя. –

+1

Zend_Controller_Action :: dispatch() вызывает postDispatch() после вызова метода действия, прежде чем он уничтожит экземпляр контроллера действий. Вы можете переопределить postDispatch() в своем контроллере действий, чтобы внести изменения в просмотр перед рендерингом (он предоставлен для этой цели.) Я думаю, вам нужно использовать плагин переднего контроллера, чтобы все произошло во время отключения цикла отправки ... –

Смежные вопросы