Php 处理Symfony应用程序中的MySQL错误
我想知道从Symfony应用程序处理MySQL异常的最佳方法是什么,例如,从普通环境(不是开发环境)处理MySQL异常: 哎呀!服务器返回“500”内部服务器时出错 错误” 这在_dev的翻译如下:Php 处理Symfony应用程序中的MySQL错误,php,error-handling,symfony1,symfony-1.4,Php,Error Handling,Symfony1,Symfony 1.4,我想知道从Symfony应用程序处理MySQL异常的最佳方法是什么,例如,从普通环境(不是开发环境)处理MySQL异常: 哎呀!服务器返回“500”内部服务器时出错 错误” 这在_dev的翻译如下: SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry '343434' for key 'rut' 您如何处理此类错误,以便向最终用户显示消息或更友好的内容 您最好创建一个自定义错误页面,并可以选择创建一个自定义
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()
,它就会通过电子邮件向您发送堆栈跟踪。您还可以包括其他信息,如$\u SERVER
变量等。您使用的是ORM吗?@meijuh是的,Symfonywell条令附带的条令会引发异常,以便您可以在控制器中尝试/捕获它。请记住,您确实希望尽快了解这种类型的错误(如在您的示例中,缺少测试或数据库模式不正确)。你需要做的几件事:1.定制500错误页面;2.设置电子邮件通知,以便您知道何时发生紧急事件;3.您也可以为条令例外添加额外的try/catch,但请记住记录或发送电子邮件,以便您了解。@François现在我可以使用try/catch,但正如您所说,这不是最好的,您能解释一下您的回答吗?我在谷歌上搜索了第二步(2),没有找到任何相关信息。请查找sfErrorNotifier2Plugin和sfErrorHandlerPlugin,它们工作得很好。无需为此编写自己的代码。