Zend Framework2 - 在 Module.php中检查管理是否登录,而不是到控制器中检查 (实现方法示例)

 在ZF2中应使用事件驱动方法实现,  会影响所有模块?

是否只仅作用于当前模块?

>>方法一


    (This should be done with event in ZF2 for more details:

    click here(参考官方方法http://framework.zend.com/manual/2.0/en/modules/zend.event-manager.event-manager.html)

     also this code may help you. http://pastebin.com/FFGVCpki)


    public function init() {
        // Attach Event to EventManager
        $events = StaticEventManager::getInstance ();

        // Add event of authentication before dispatch
        $events->attach ( 'Zend\Mvc\Controller\AbstractActionController', 'dispatch', array (
            $this,
            'authPreDispatch'
        ), 110 );
    }
    public function authPreDispatch($event){
    $target = $event->getTarget ();
    $serviceLocator = $target->getServiceLocator();
    // Do what ever you want to check the user's identity
    $url = $event->getRouter ()->assemble ( array (
                "controller" => "<controller>"
            ), array (
                'name' => '<route name>'
            ) );
    $response = $event->getResponse ();
        $response->setHeaders ( $response->getHeaders ()->addHeaderLine ( 'Location', $url ) ));
        $response->setStatusCode ( 302 );
        $response->sendHeaders ();
        exit ();

    }


    >>方法二:

    //filename : SanAuthWithDbSaveHandler/Module.php
    namespace SanAuthWithDbSaveHandler;
    use Zend\Mvc\MvcEvent;
   
    class Module
    {
     public function onBootstrap(MvcEvent $e)
     {
     $em = $e->getApplication()->getEventManager();
     $em->attach('route', array($this, 'checkAuthenticated'));
     }
    
     public function isOpenRequest(MvcEvent $e)
     {
     if ($e->getRouteMatch()->getParam('controller') == 'SanAuthWithDbSaveHandler\Controller\AuthController') {
     return true;
     }
    
     return false;
     }
    
     public function checkAuthenticated(MvcEvent $e)
     {
     if (!$this->isOpenRequest($e)) {
     $sm = $e->getApplication()->getServiceManager();
     if (! $sm->get('AuthService')->getStorage()->getSessionManager()
     ->getSaveHandler()->read($sm->get('AuthService')->getStorage()->getSessionId())) {
     $e->getRouteMatch()
     ->setParam('controller', 'SanAuthWithDbSaveHandler\Controller\Auth')
     ->setParam('action', 'index');
     }
     }
     }
   

  >> ---------- 根据MVC $e获取tabelGateway -----------------

     $e->getApplication()->getServiceManager()->get('Admin\Model\ModsTable')->sideBar()

   ' Admin\Model\ModsTable' 在public function getServiceConfig() 中配置注入



    public function getConfig()
    {
        return include __DIR__ . '/config/module.config.php';
    }

  }



>>官方添加模块事件管理方法

http://framework.zend.com/manual/2.0/en/modules/zend.event-manager.event-manager.html






  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值