Zend_Auth быстрый и везде доступ к UserID - PullRequest
0 голосов
/ 03 декабря 2011

У меня есть Zend-приложение с аутентификацией пользователя.Мне нужен идентификатор пользователя почти в каждом действии для запросов к базе данных.Конечно, я хочу иметь быстрый доступ, прежде всего, в контроллерах, но также и в скриптах представления.

Способ, которым я до сих пор добираюсь:

Zend_Auth::getInstance()->getIdentity()->User_ID

Как я могу написать плагин или помощник для предоставления идентификатора пользователяпроще?

например, вот так:

$this->User_ID

Ответы [ 2 ]

3 голосов
/ 03 декабря 2011

вы можете создать свойство в вашем контроллере, которое можно установить в конструкторе контроллера:

$this->_User_ID = Zend_Auth::getInstance()->getIdentity()->User_ID;

или уменьшите его до Zend_Registry при установке и использовании оттуда.

1 голос
/ 03 декабря 2011

Вот плагин, который будет вставлять идентификатор пользователя в представление или устанавливать его в null, если у пользователя нет идентификатора.

<?php

class Application_Plugin_Identity extends Zend_Controller_Plugin_Abstract
{
    public function preDispatch(Zend_Controller_Request_Abstract $request)
    {
        $front     = Zend_Controller_Front::getInstance();
        $bootstrap = $front->getParam('bootstrap');

        $bootstrap->bootstrap('view');
        $view = $bootstrap->getResource('view');

        if (Zend_Auth::getInstance()->hasIdentity()) {
            $view->User_ID = Zend_Auth::getInstance()->getIdentity()->User_ID;
        } else {
            $view->User_ID = null;
        }
    }
}

Чтобы включить его, вы можете зарегистрировать его в методе начальной загрузки, напримерthis:

Zend_Controller_Front::getInstance()
->registerPlugin(new Application_Plugin_Identity());

Теперь из любого из ваших скриптов представления вы можете ссылаться на $this->User_ID, и он будет содержать идентификатор пользователя или ноль, если вы не авторизованы.

ОБНОВЛЕНИЕ:

Помощник действий работает хорошо, если вы в основном хотите получить к нему доступ с вашего контроллера.

С вашего контроллера позвоните $userId = $this->_helper->Identity();, чтобы получить идентификатор пользователя.В качестве бонуса я назначаю идентификатор пользователя для представления, поэтому из представления можно позвонить $this->User_ID

<?php

class My_Helper_Identity extends Zend_Controller_Action_Helper_Abstract
{
    protected static $_userId = null;

    public function direct()
    {
        if ($this->_userId == null) {
            $request  = $this->getRequest();
            $view     = $this->getActionController()->view;

            if (Zend_Auth::getInstance()->hasIdentity()) {
                $user_id = Zend_Auth::getInstance()->getIdentity()->User_ID;
            } else {
                $user_id = null;
            }

            $view->User_ID = $user_id;
            $this->_userId = $user_id;
            $this->getActionController()->_userId = $user_id;
        }

        return $this->_userId;
    }
}
...