как получить вид объекта в плагине? - PullRequest
4 голосов
/ 08 декабря 2011

У меня есть помощник действия контроллера, где я сохраняю объект пользователя в виде (в функции init), как это:

Zend_Layout::getMvcInstance()->getView()->user = $user;

Я бы хотел получить доступ к объекту в методе preDispatch плагина контроллера, чтобы мне не приходилось искать пользователя в базе данных. Я пытался сделать это так:

$user = Zend_Layout::getMvcInstance()->getView()->user;

Но он возвращает нулевой объект. Я надеюсь, что это потому, что я делаю это неправильно, а не потому, что я запрограммировал уловку 22 в моей логике входа в систему. Есть ли другой способ получить доступ к объекту?

Ответы [ 2 ]

6 голосов
/ 09 декабря 2011

Я думаю, что использование следующих методов в вашем помощнике действий может вам помочь.

private $user

public function init()
{
    $this->user = new user();
}

public function preDispatch()
{
    $user = $this->user;
    //Do whatever you wish with the user object.
    // although you probably don't need to do anything.
}

public function direct()
{
    Zend_Layout::getMvcInstance()->getView()->user = $this->user;
    //alternatively just return the user object or whatever you want to do
}

Затем, как только ваш помощник зарегистрирован, вы можете просто сделать $this->_helper->helperName() в вашем контроллере, чтобы поместить объект пользователя вview.

У Мэтью Вейро''Phiney есть хорошее объяснение действия помощников на девзоне.Особенно цель метода direct().

0 голосов
/ 09 декабря 2011

Да, хороший подход - иметь одноэлементный класс для текущего зарегистрированного пользователя;в таком случае это будет доступно где угодно - плагины, представления, формы.

...