Сделать объект пользователя доступным для всех контроллеров в Zend? - PullRequest
1 голос
/ 27 декабря 2010

Я использую Zend_Auth для идентификации пользователя в моем приложении. Это создает сеанс с объектом userobject.

У меня вопрос: как сделать этот объект доступным для каждого контроллера и действия, чтобы мне не приходилось извлекать его из сеанса каждый раз, когда мне нужны данные из этого объекта?

Я предполагаю, что это должно быть сделано в bootstrap.php или index.php, но я действительно не знаю, как сделать его доступным для каждого контроллера ... поэтому любые примеры кода будут оценены!

Спасибо!

1 Ответ

2 голосов
/ 27 декабря 2010

Bootstrap и index.php, вероятно, слишком рано. Поскольку маршрутизация еще не завершена, нет контроллера, в который можно внедрить ваш $user объект.

На ум приходит несколько вариантов:

Использование BaseController

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

$this->_user = Zend_Auth::hasIdentity() ? Zend_Auth::getIdentity() : null;

Тогда $this->_user будет доступен везде, где действуют ваши контроллеры.

Но многие люди высмеивают идею BaseController. Лучше использовать Action Helper, описанный ниже.

Использование помощника действий

Создайте action helper , чей метод direct() возвращает объект $user, созданный так же, как и выше. Затем в ваших контроллерах вы можете получить к нему доступ как $this->_helper->user.

В точности то, что вы называете вспомогательным классом и где вы его размещаете, зависит от путей и пространств имен, которые вы задали в Zend_Controller_Action_HelperBroker с помощью метода addPath().

Использовать плагин контроллера

Перечислено для полноты. Но на самом деле, лучшая вещь IMO - это Action Helper выше.

...