Как получить перенаправление Zend_Controller_Plugin_Abstract, работающее с полным изменением URL? - PullRequest
1 голос
/ 18 января 2011

У меня есть администратор. Webapp.one необходимо войти в систему, прежде чем выполнять какое-либо действие. Теперь / default / index / index имеет форму входа, которая является компонентом ExtJs. В основном, процесс входа в систему является ajax. Я создалПлагин для отключения рендеринга и макета, а также для проверки, вошел ли пользователь в систему или нет (пока нет полного acl).

вот код:

 public function  preDispatch(Zend_Controller_Request_Abstract $request) {
    parent::preDispatch($request);

    if($request->isXmlHttpRequest()){
        $ViewHelper = Zend_Controller_Action_HelperBroker::getStaticHelper("ViewRenderer");
        $ViewHelper->setNoRender(true);
        Zend_Layout::getMvcInstance()->disableLayout();

    }


    $module = $request->getModuleName();
    $controller = $request->getControllerName();
    $action = $request->getActionName();

    if(!Zend_Auth::getInstance()->hasIdentity()){
        $url = "/".$module."/".$controller."/".$action;
          $session = new Zend_Session_Namespace("myapp.auth");
        $session->requestURL = $url;
        $request->setModuleName("default");
        $request->setControllerName("index");
        $request->setActionName("index");
        $request->setDispatched();

    }
}

это похоже на работу, но тогда адресная строка все еще имеет исходный URL-адрес запроса.Например, я набрал "myapp/admin/cpanel" в строке URL, и он открывает страницу входа в браузере, в то время как адресная строка все еще имеет "myapp/admin/cpanel". В тот момент, когда вход в систему завершается неудачно, потому что вывод имеет некоторую визуализацию html, я считаюстраница входа (которая работала нормально при прямом попадании).

Кто-нибудь сталкивался с этим раньше, или это просто я делаю что-то не так. Я буду рад, если вы поделитесь своим опытом с этим.

спасибо за чтение.

1 Ответ

2 голосов
/ 18 января 2011

это похоже на работу, но тогда адресная строка все еще имеет исходный запрос URL-адрес. например, я набрал «myapp / admin / cpanel» в строке URL, и он открывается страницу входа в браузере, пока адресная строка еще "MYAPP / админ / Cpanel".

В случае, если вам не нравится это поведение, вы можете рассмотреть возможность перенаправления пользователя в форму входа вместо обработки входа перед каждым контроллером. Если ваша страница логина действительно доступна в данный момент, это должно быть так же просто, как написать:

<?php
public function  preDispatch(Zend_Controller_Request_Abstract $request) {
    parent::preDispatch($request);

    if($request->isXmlHttpRequest()){
        $ViewHelper = Zend_Controller_Action_HelperBroker::getStaticHelper("ViewRenderer");
        $ViewHelper->setNoRender(true);
        Zend_Layout::getMvcInstance()->disableLayout();
    }

    $module = strtolower( $request->getModuleName( ) );
    $controller = strtolower( $request->getControllerName( ) );
    $action = strtolower( $request->getActionName( ) );

    /** Check to see if the controller is already the login controller to prevent an endless loop. */
    //corrected if(!array( 'default', 'index', 'index' ) === array()) to if(array( 'default', 'index', 'index' ) !== array())
    if( ( array( 'default', 'index', 'index' ) !== array( $module, $controller, $action ) ) {

        if( !Zend_Auth::getInstance()->hasIdentity( ) ) {
            $url = "/".$module."/".$controller."/".$action;
              $session = new Zend_Session_Namespace("myapp.auth");
            $session->requestURL = $url;
            $this->getResponse()->setRedirect( '/' )->sendResponse( );
        }
    }
}

Я не могу это проверить, но мысль должна быть ясной.

...