Zend Framework повторяет функциональность - PullRequest
1 голос
/ 03 февраля 2012

Я недавно начал работать с Zend Framework, и я абсолютно влюбился в него, и я даже списал свою собственную платформу в пользу этого.

Но я упускаю что-товероятно, так болезненно очевидно, что вы немного посмеетесьBootstrap, но я немного заболел и не могу позволить себе тратить время, есть ли лучший способ проверить IE в начальной загрузке?вместо повторения 20+ строк кода и функциональности в каждом контроллере.

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

Ответы [ 2 ]

4 голосов
/ 03 февраля 2012

Вы можете использовать плагин контроллера для этого. Смотри: http://framework.zend.com/manual/en/zend.controller.plugins.html

class Your_Plugin_Login extends Zend_Controller_Plugin_Abstract
{
    public function preDispatch(Zend_Controller_Request_Abstract $request)
    {
        if (!Zend_Auth::getInstance()->hasIdentity()) {
            // send the user to the login page
            $request->setControllerName('login')
                    ->setActionName('login');
        }
    }
}

замените имена контроллеров / действий теми, которые подходят для вашей страницы входа, а 'Your' - пространством имен вашего приложения.

Затем вы регистрируете плагин на Front-контроллере либо в application.ini, либо в своем загрузчике с помощью Zend_Controller_Front::getInstance()->registerPlugin(new Your_Plugin_Login());.

Редактировать : Если вы также хотите добавить данные пользователя в представление, вы можете сделать:

$layout = Zend_Layout::getMvcInstance();
$view = $layout->getView();
$view->user = Zend_Auth::getIdentity();
1 голос
/ 03 февраля 2012

Вы можете написать свой собственный контроллер, который наследуется от Zend Controller (назовите его, например, DaveMac_Controller - вы можете определить префикс в файле конфигурации приложения, чтобы приложение могло его автоматически загружать (и вам нужно быть осторожным с тем, в каком каталоге вы сохраняете класс в)). В функции конструктора этого класса запустите проверку подлинности. Затем измените все контроллеры вашей страницы, чтобы они наследовали от DaveMac_Controller, а не от Zend по умолчанию.

Если бы я был дома, я мог бы скопировать и вставить некоторый код в качестве примера, но на работе прямо сейчас, надеюсь, приведенного выше плана вполне достаточно.

* edit Good ol 'dropbox:)

application.ini

includePaths.library = APPLICATION_PATH "/../library"
autoloaderNamespaces[] = "DaveMac_"

/ .. / библиотека / DaveMac / Controller / action.php

<?php 

class DaveMac_Controller_Action extends Zend_Controller_Action {


    protected $acl;
    protected $user;
    protected $userRole;

    public function init() {

        //retrieve and store user details
        $auth = Zend_Auth::getInstance(); 
        if($auth->hasIdentity()){
            $user = $auth->getIdentity();
            $this->user = $user;
            $this->view->user = $user;
            $this->userRole = $user->role;
        } else {
            $this->userRole = "guest";
        }

        //Initialise access control list
        $this->acl = new DaveMac_Acl();
    }

    protected function checkAuth($pageLevel, $redirect = "/") {
        if($this->user) {
            if(!$this->acl->isAllowed($this->userRole, $pageLevel)) {
                $this->_redirect($redirect);
            }
    } else if ($pageLevel != DaveMac_Resources::PUBLIC_ONLY_PAGE) {
        $this->_redirect('/login/returnurl/' . str_replace('/','-',$this->getRequest()->getRequestUri()));
        }
    }
}

Вероятно, у вас уже будут свои собственные функции проверки подлинности, но я решил оставить свой в любом случае

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