最好的辦法是製作一個自定義錯誤頁面,並可選擇創建一個自定義錯誤處理程序來提醒您錯誤。
首先,創建一個自定義錯誤頁面,只需在/path/to/project/config/error/error.html.php
中創建一個文件即可。 Symfony會自動使用您的錯誤頁面,而不是自己的錯誤頁面(如果存在)。
如果您想要更高級一點,您可以添加一個事件偵聽器來處理未捕獲的異常。要做到這一點,編輯/path/to/project/config/ProjectConfiguration.class.php
並添加一個監聽器,如下:
class ProjectConfiguration extends sfProjectConfiguration
{
public function setup()
{
//...
$this->dispatcher->connect('application.throw_exception', array($this, 'listenToException'));
}
public function listenToException(sfEvent $event)
{
$handler = new myExceptionHandler($event);
$handler->doSomethingHere();
}
}
然後,所有你需要做的就是創建自己的myExceptionHandler
類節選的sfEvent $event
參數。你可以在這裏做任何你想做的事情,我更願意發郵件給自己告訴我發生了錯誤。
下面是一個簡單的例子:
class myExceptionHandler
{
protected $event;
public function __construct(sfEvent $event)
{
$this->event = $event;
}
protected function getMailer()
{
return sfContext::getInstance()->getMailer();
}
public function notify()
{
$subject = 'Uncaught Exception';
$body = $this->event->getSubject();
$mailer = $this->getMailer();
$mailer->composeAndSend('[email protected]', '[email protected]', $subject, $body);
}
}
在這個例子中,你只需撥打$handler->notify()
從項目配置,它會向您發送電子郵件的堆棧跟蹤。您還可以包括其他信息,如$_SERVER
變量等...
您使用的是ORM嗎? – meijuh
@meijuh是的,Symfony自帶的學說 – Reynier
好教條是拋出一個異常,所以你可以嘗試/捕捉它在你的控制器。請記住,你真的想盡快意識到這種類型的錯誤(就像在你的例子中,缺少一個測試或者你的數據庫模式是不正確的)。您需要的幾件事:1.定製500錯誤頁面; 2.設置電子郵件通知,以便您知道何時發生500; 3.您還可以爲原則例外添加額外的嘗試/捕獲,但請記住記錄或通過電子郵件發送,以便您瞭解它。 –