我想知道从 Symfony 应用程序处理 MySQL 异常的最佳方法是什么,少说,例如来自正常环境(不是开发)的这个:
哎呀!发生错误 服务器返回“500 内部服务器错误”。
在 _dev 翻译如下:
SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry '343434' for key 'rut'
您如何处理此类错误以向最终用户显示消息或更友好的内容?
我想知道从 Symfony 应用程序处理 MySQL 异常的最佳方法是什么,少说,例如来自正常环境(不是开发)的这个:
哎呀!发生错误 服务器返回“500 内部服务器错误”。
在 _dev 翻译如下:
SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry '343434' for key 'rut'
您如何处理此类错误以向最终用户显示消息或更友好的内容?
您最好的选择是制作一个自定义错误页面,并可选择创建一个自定义错误处理程序来提醒您错误。
首先,创建一个自定义错误页面,只需在/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('root@yourserver.com', 'you@youremail.com', $subject, $body);
}
}
在此示例中,您只需$handler->notify()
从项目配置中调用,它就会通过电子邮件将堆栈跟踪发送给您。您还可以包含其他信息,例如$_SERVER
变量等...