Zend Framework2 - 在 Module.php中检查管理是否登录,而不是到控制器中检查 (实现方法示例)
2015-04-18 17:21
1131 查看
在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
是否只仅作用于当前模块?
>>方法一
(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
相关文章推荐
- PHP实现注册登录,并实现注册时动态检查用户名是否可用
- PHP检查网站是否宕机的方法示例
- PHP检查端口是否可以被绑定的方法示例
- PHP调用微博接口实现微博登录的方法示例
- PHP实现顺时针打印矩阵(螺旋矩阵)的方法示例
- ASP MVC利用控制器的OnActionExecuting方法,实现过滤,实现Session登录校验
- PHP实现浏览器中直接输出图片的方法示例
- PHP实现用户异地登录提醒功能的方法【基于thinkPHP框架】
- PHP简单实现单点登录功能示例
- PHP实现RSA加解密算法示例(生成密钥位数为1024位的方法)
- PHP数组递归排序实现方法示例
- PHP使用CURL实现对带有验证码的网站进行模拟登录的方法
- PHP实现动态删除XML数据的方法示例
- PHP实现动态获取函数参数的方法示例
- vue.js中实现登录控制的方法示例
- PHP使用curl_multi实现并发请求的方法示例
- PHP实现压缩图片尺寸并转为jpg格式的方法示例
- PHP实现搜索时记住状态的方法示例
- 原生JS实现Ajax通过POST方式与PHP进行交互的方法示例
- JS实现的判断方法、变量是否存在功能示例