我正在使用Symfony 2.1。我想根据用户是否登录设置重定向例程。我检查它的方式是$User->isLoggedIn()
,其中User
是一项服务。
我想在控制器执行之前执行此操作。在Controller执行之前,我几乎没有其他事情发生。我使用kernel.controller
的事件kernel.event_listener
来做这些事情。但我意识到我无法使用此事件重定向到URL。
我知道我需要使用事件:kernel.event_listener的kernel.request才能重定向到URL。
问题。 我使用以下逻辑来确定是否需要重定向。
if (!$controller[0] instanceof NoLogInNeededInterface) {
if (!$User->isLoggedIn()) {
//redirect here
}
}
因此,在kernel.request
事件中,$controler[0]
不可用。在kernel.controller
事件中,无法设置响应(将被忽略)。
有没有人遇到同样的问题并解决了。还是有更好的方法,我正在尝试做什么?
答案 0 :(得分:1)
我意识到我可以通过使用kernel.event_listner的kernel.exception事件来实现。
所以在服务中:
my.service:
class: MyBundle\EventListner\ExceptionListner
tags:
- { name: kernel.event_listener, event: kernel.exception, method: onKernelException }
arguments: [ %logoutUrl% ]
然后在班级本身:
use Symfony\Component\HttpKernel\Event\GetResponseForExceptionEvent;
use Symfony\Component\HttpFoundation\RedirectResponse;
class ExceptionListner
{
protected $_url;
public function __construct($url)
{
$this->_url = $url;
}
public function onKernelException(GetResponseForExceptionEvent $event) {
$exception = $event->getException();
//dont necessarily need this condition
if ($exception instanceof RedirectException) {
$response = new RedirectResponse($this->_url);
$event->setResponse($response);
}
}
}
如果这是或不是更好的方法,我仍然在寻求建议。 希望这能帮助那些正在挣扎的人。 P