我正在编写一个模块ACL
in ZF2
,我快完成了。
我陷入困境的一点是当用户无权访问请求的页面时,我想forward用户到显示的页面403
信息。
我努力了重定向用户至403
但它更新了URL
,所以现在我正在尝试forward user.
我想做的只是从Module.php
。我试过下面的代码 -
模块.php
if (!$isAllowed) {
$e->getApplication()->getServiceManager()->get('ControllerPluginManager')->get('forward')->dispatch('acl');
}
使用这个我得到以下错误 -
未捕获的异常“Zend\Mvc\Exception\DomainException”,消息为“Forward 插件需要一个实现 InjectApplicationEventInterface 的控制器”
我也尝试过实施Acl
控制器与InjectApplicationEventInterface
,但问题还是一样。
你能解释一下如何Forward
到另一个Action
from Module.php
?
如果您需要更多详细信息,请告诉我。
您可以做的就是监听调度事件。您可以在此事件期间更新路由匹配,以匹配您自己定义的控制器/操作对以呈现 403 页面。
In code:
use MvcEvent;
class Module
{
public function onBootstrap($e)
{
$app = $e->getApplication();
$acl = $app->getServiceManager()->get('ACL'); // get your ACL here
if (!$acl->isAllowed()) {
$em = $app->getEventManager();
$em->attach(MvcEvent::EVENT_DISPATCH, function($e) {
$routeMatch = $e->getRouteMatch();
$routeMatch->setParam('controller', 'my-403-controller');
$routeMatch->setParam('action', 'my-403-action');
}, 1000);
}
}
}
转发是一种调度控制器的模式当另一个控制器已被调度时。这不是你的情况,因为我从你的问题中读到了这一点。所以不要使用转发插件,而是在调度之前修改路由匹配。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)