use Symfony\Component\HttpKernel\Event\GetResponseForExceptionEvent;
use Symfony\Component\HttpFoundation\Response;
public function onKernelException(GetResponseForExceptionEvent $event)
{
$exception = $event->getException();
// 你已经获得了Exception:可以针对性地写逻辑
$response = new Response();
$event->setResponse($response); // 如果你在event里设置了response,这个response就会返回给用户
// ...
}
Doctrine 2是一個獨立的第三方函式庫,封裝的是PDO,PDO遇到唯一性衝突,丟出的是一個PDOException。
預設配置下,開發環境的出錯頁面,也就是catch了這個PDOException,輸出Message而已。
重新定義Symfony 2的報錯頁面,有兩種方法:
(一)建一個app/Resources/TwigBundle/views/Exception/error.html.twig,依自己需要進行修改。
模板裡有statustext,statuscode等資料可以用。
(二)或是用Event,監聽kernel.exception事件:
http://symfony.com/doc/current/book/internals.html#kernel-kernel-exception
Symfony的The Book的模板裡面已經寫的很清楚了,會先查找app/Resources下是否有這個模板,沒有才去Bundle裡面. 最重要的是需要清除快取才有效