Перенаправить пользователя при входе в систему на основе переменной сеанса - PullRequest
1 голос
/ 21 октября 2011

В моем Zend-проекте у меня есть этот код в header.phtml, который загружается в каждый макет / представление.Это начало функции, которая устанавливает div на основе сессии пользователя.Мне нужно добавить перенаправление на основе этих переменных.Так что любая страница (контроллер), к которой пользователь пытается получить доступ, будет перенаправлена ​​на действие индекса контроллера биллинга.Я знаю, что могу установить перенаправление в каждом действии индекса контроллера, но это много кода.В любом случае я могу добавить редирект в мой header.phtml?

Спасибо

<?php
$userSess= new Zend_Session_Namespace('Default');
if(isset($userSess->subscription_state) && isset($userSess->account_type)){
    if($userSess->subscription_state == "unpaid" && $userSess->account_type == 1){ 
        ?>

Ответы [ 2 ]

2 голосов
/ 21 октября 2011

То, что вы делаете, вероятно, лучше всего подходит для Front Controller Plugin .

Обрабатывая тестирование в макете, вы уже съели затраты на обработку запроса и отображение представления, просто чтобы отбросить его путем перенаправления.

В отличие от этого, выполняя эти проверки на некотором раннем этапе цикла отправки - например, на preDispatch() - вам никогда не придется загружать контроллер и обрабатывать действие.

1 голос
/ 21 октября 2011

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

<?php

class My_Controller_Plugin_Abc extends Zend_Controller_Plugin_Abstract{

 public function preDispatch(Zend_Controller_Request_Abstract $request){

        $userSess= new Zend_Session_Namespace('Default');
        if(isset($userSess->subscription_state) && isset($userSess->account_type)){
            if($userSess->subscription_state == "unpaid" && $userSess->account_type == 1){ 
                    $this->getResponse()->setRedirect("/index/login")->sendResponse();
            }
         }

 }

}

И зарегистрируйте плагин в Bootstrap.php

$frontController = Zend_Controller_Front::getInstance();    
$frontController->registerPlugin(new My_Controller_Plugin_Abc());
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...