壞主意,從控制器直接重定向。我寧願拋出一些自定義異常。
class FooController{
public function __construct(){
if (some_test){
throw RedirectionException(); // name it however you like
}
}
}
然後,在Symfony
,設置了ExceptionListener
將評估類型Exception
拋出你的應用程序,重定向到另一個網址,如果必要的。此服務很可能取決於@routing
服務來生成備用網址目標。
服務配置:
services:
kernel.listener.your_listener_name:
class: Your\Namespace\AcmeExceptionListener
tags:
- { name: kernel.event_listener, event: kernel.exception, method: onKernelException }
Listener類:
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);
}
}
}
這種方式可以保持單錯誤處理和重定向邏輯。太複雜?
在什麼構造函數中? –
在構造函數中使用重定向的壞主意 –
@MarkusKottländer: 在我的控制器的構造函數中。維克多:爲什麼這是一個壞主意? – gprusiiski