我想在特定的sutiation中对构造函数进行重定向。 我试着这样做:
return new \Symfony\Component\HttpFoundation\RedirectResponse($url);
并且像这样:
return $this->redirect($url);
但它不起作用。在其他所有方法中都有效,但由于某些原因,当此代码在构造函数中时,它不起作用。没有错误或警告。
如果您需要更多信息,请在评论中提问。 谢谢您的时间。
答案 0 :(得分:1)
在构造函数中使用重定向的好主意。构造函数仅返回当前object of the class
(在您的情况下为控制器的对象),并且它不能返回redirect object
。也许你可以使用FrameworkBundle:Redirect:urlRedirect
:
# redirecting the root
root:
path: /
defaults:
_controller: FrameworkBundle:Redirect:urlRedirect
path: /app
permanent: true
中的示例
答案 1 :(得分:0)
直接从控制器重定向的好主意。我宁愿抛出一些自定义异常。
class FooController{
public function __construct(){
if ( some_test ){
throw RedirectionException(); // name it however you like
}
}
}
然后,在Symfony
中,设置ExceptionListener
,它将评估抛出的Exception
类类型,并在必要时将您的应用程序重定向到另一个URL。此服务很可能依赖于@routing
服务来生成备用URL目标。
服务配置:
services:
kernel.listener.your_listener_name:
class: Your\Namespace\AcmeExceptionListener
tags:
- { name: kernel.event_listener, event: kernel.exception, method: onKernelException }
听众课程:
class AcmeExceptionListener
{
public function onKernelException(GetResponseForExceptionEvent $event)
{
// You get the exception object from the received event
$exception = $event->getException();
if ( $exception instanceof RedirectionException ){
$response = new RedirectResponse();
$event->setResponse($response);
}
}
}
这种方式可以维护单个错误处理和重定向逻辑。太复杂了?