Zend Framework текущий маршрут в начальной загрузке - PullRequest
1 голос
/ 08 марта 2012

Дамы и господа,

Я усердно работаю над новым веб-приложением, основанным на Zend Framework. Почти все веб-приложение будет защищено логином (именем пользователя и паролем).

Моя идея - проверить, может ли посетитель пройти аутентификацию, и если нет, проверить, запрашивает ли пользователь маршрут входа. Если он не пытается войти, он будет перенаправлен на страницу входа.

<?php

class Bootstrap extends Zend_Application_Bootstrap_Bootstrap
{  
    /**
     * Bootstrap::_initRouterRewrites()
     * 
     * @return void
     */
    protected function _initRouterRewrites()
    {
        $frontController  = Zend_Controller_Front::getInstance();
        $this->router = $frontController->getRouter();

        $this->router->addRoute(
            'default',
            new Zend_Controller_Router_Route('/',
                                            array('controller' => 'index',
                                                  'action' => 'index'))
                     )
                     ->addRoute(
            'login',
            new Zend_Controller_Router_Route('/inloggen.html',
                                            array('controller' => 'auth',
                                                  'action' => 'login'))
        ); 
    }

    /**
     * Bootstrap::_initZendSession()
     * 
     * @return void
     */
    protected function _initZendSession()
    {
        // Ensure that both the session and the db resources are bootstrapped
        $this->bootstrap(array('db', 'session'));

        // Actually start the session
        Zend_Session::start();
    }

    /**
     * Bootstrap::_initAuthentication()
     * 
     * @return void
     */
    protected function _initAuthentication()
    {
        // Instantiate auth object
        $auth = Zend_Auth::getInstance();

        // Check if visitor has an identity
        if (!$auth->hasIdentity())
        {

        }
    }
}

Когда я использую метод $ this-> router-> getCurrrentRoute () в методе _initAuthentication, я получаю следующую ошибку: «Текущий маршрут не определен».

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

Заранее спасибо!

Ответы [ 2 ]

4 голосов
/ 08 марта 2012

Во время начальной загрузки еще не запущена маршрутизация.Здесь вам нужен плагин FrontController , который подключается к жизненному циклу запроса в соответствующем месте.В вашем случае это, вероятно, произойдет в течение routeShutdown после того, как маршрутизация определит, куда отправить запрос.

С http://devzone.zend.com/1692/zend-framework-mvc-request-lifecycle/:

enter image description here

0 голосов
/ 08 марта 2012

Используйте такие плагины в bootstrap.php: protected function _initPlugins() { $front = Zend_Controller_Front::getInstance(); $front->registerPlugin(new Plugin_Checkaccess()); }

и в плагинах / Checkaccess.php `

public function preDispatch(Zend_Controller_Request_Abstract $request)
{ 

    $request = $this->getRequest();
            $controllerName = strtolower($request->getControllerName());
            $actionName = strtolower($request->getActionName());

            if ('user' == $controllerName)
    {
                $session = new Zend_Session_Namespace('USER');

                $notLogged = array('login','register');

                if(!in_array($actionName, $notLogged) && !$session->user){
                    $request->setControllerName("index");
                    $request->setActionName("index");
                    $this->_response->setRedirect('/');
                    //$this->_response->setRedirect('/?redirectTo='.$this->_request->getRequestUri());
                }elseif(in_array($actionName, $notLogged) && $session->user){
                    $request->setControllerName("user");
                    $request->setActionName("index");
                    $this->_response->setRedirect('/home');
                }
                return;
    }

}}`

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...