Zend: выполнить что-то перед выполнением контроллера - PullRequest
1 голос
/ 26 ноября 2010

В моем проекте Zend Framework я хочу проверить, установлен ли файл cookie. Если это так, я хочу использовать содержимое cookie для входа в систему пользователя.

Поскольку мне необходимо выполнить этот автоматический вход в систему до вызова какого-либо контроллера, я попытался поместить его в Bootstrap. Там я хочу проверить базу данных, если информация пользователя действительна. К сожалению, на данный момент адаптер базы данных по умолчанию еще не инициализирован.

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

Ответы [ 2 ]

2 голосов
/ 26 ноября 2010

У меня не очень хороший опыт работы с Zend Framework, но я думаю, что вы должны создать собственный универсальный контроллер, например GenericController, который расширяет Zend_Controller_Action, и поместить свой код в функцию preDispatch (). Все ваши контроллеры будут тогда подклассом вашего пользовательского контроллера, например:

class GenericController extends Zend_Controller_Action{
   function preDispatch(){
      parent::preDispatch();
      // put your code here
   }
}
class FooController extends GenericController{
...
}
0 голосов
/ 26 ноября 2010

Используйте методы:

init()
// and
preDispatch()

реализуйте их в своем классе, init запускается при создании, предзапуск выполняется непосредственно перед вашим методом действия iirc

api

На этой странице, на которую я ссылался выше, указано:

Примечание. Использование init () и preDispatch () В предыдущем разделе мы ввели метод init () ив этом разделе метод preDispatch ().В чем разница между ними, и какие действия вы предпримете в каждом?Метод init () в первую очередь предназначен для расширения конструктора.Как правило, ваш конструктор должен просто устанавливать состояние объекта и не выполнять много логики.Это может включать в себя инициализацию ресурсов, используемых в контроллере (таких как модели, объекты конфигурации и т. Д.), Или назначение значений, полученных из фронт-контроллера, начальной загрузки или реестра.Метод preDispatch () также можно использовать для установки состояния объекта или среды (например, представления, помощника действия и т. Д.), Но его основная цель заключается в принятии решения о том, следует ли отправлять запрошенное действие.Если нет, вы должны затем _forward () выполнить другое действие или вызвать исключение.Примечание: _forward () на самом деле не будет работать правильно при выполнении из init (), которая является формализацией намерений двух методов.

...