本文概述
- 1.创建插件结构
- 2.创建通知类
- 3.创建插件配置类
- 4.启用插件
【如何在Symfony 1.4中使用sfErrorNotifierPlugin通过电子邮件自动报告异常】在本文中, 我们将向你简要说明如何通过电子邮件自动报告Symfony 1.4应用程序的异常。
1.创建插件结构在plugins目录内, 你将需要创建一个目录, 其名称为sfErrorEmailNotifierPlugin。在此目录中, 你将创建具有2个类的2个目录, 如下列表所示:
- sfErrorEmailNotifierPlugin
- 配置
- sfErrorEmailNotifierPluginConfiguration.class.php
- LIB
- sfErrorEmailNotifierPlugin.php
- 配置
2.创建通知类sfErrorEmailNotifier类将包含在你的应用程序上引发未处理的异常时将执行的代码。将连接到应用程序的application.throw_exceptions事件的调度程序, 将在指定的类中触发定义的静态函数。在我们的例子中, 我们将有一个方法notify, 它接收第一个参数sfEvent对象作为对象, 它将基本上操纵该事件以提取错误信息并发送电子邮件:
<
?php/** * This class notifies via Email details about exceptions on the application. * * @packagesymfony * @subpackage plugin * @authorCarlos Delgado <
dev@ourcodeworld.com>
*/class sfErrorEmailNotifier {static public function notify(sfEvent $event) {$email = "email@email.com";
$passwordEmail = "12345";
$date = date('d/m/Y H:i:s');
$exception = $event->
getSubject();
$context = sfContext::getInstance();
$env = 'n/a';
if ($conf = sfContext::getInstance()->
getConfiguration()) {$env = $conf->
getEnvironment();
} // The notification should be sent only in production mode, not in development environmentif($env == "prod"){try{$data = http://www.srcmini.com/array();
$data['className'] = get_class($exception);
$data['message'] = !is_null($exception->
getMessage()) ? $exception->
getMessage() : 'n/a';
$data['moduleName'] = $context->
getModuleName();
$data['actionName'] = $context->
getActionName();
$data['uri'] = $context->
getRequest()->
getUri();
$data['line'] = $exception->
getLine();
$data['file'] = $exception->
getFile();
$subject = "Unhandled exception: {$_SERVER['HTTP_HOST']} Exception - $env - {$data['message']}";
// 1. Build email HTML$emailContent = <
<
<
EOF<
h1>
Automatic error report in your application<
/h1>
<
p>
Date: {$fecha}<
/p>
<
br>
<
p>
Subject: <
b>
{$subject}<
/b>
<
/p>
<
br>
<
p>
An exception has been registered on the production environment, details as follow:<
/p>
<
ul>
<
li>
Exception type: <
b>
{$data['className']}<
/b>
<
/li>
<
li>
Message: <
b>
{$data['message']}<
/b>
<
/li>
<
/ul>
<
p>
The exception was thrown in:<
/p>
<
ul>
<
li>
URI: <
b>
{$data['uri']}<
/b>
<
/li>
<
li>
Module: <
b>
{$data['moduleName']}<
/b>
<
/li>
<
li>
Action: <
b>
{$data['actionName']}<
/b>
<
/li>
<
li>
File: <
b>
{$data['file']}<
/b>
<
/li>
<
li>
Line: <
b>
{$data['line']}<
/b>
<
/li>
<
/ul>
EOF;
// 2. Send email// The transport message configuration may change according to your email service$transport = \Swift_SmtpTransport::newInstance('smtp.mailserver.com', 465, 'ssl')->
setUsername($email)->
setPassword($passwordEmail);
$mailer = \Swift_Mailer::newInstance($transport);
$message = \Swift_Message::newInstance("Automatic error report in {$nombreAplicacion}")->
setFrom(array($email =>
'Automatic error report'))->
setTo(array("targetemail@mail.com" =>
"targetemail@mail.com"))->
setBody($emailContent, 'text/html');
// Enviar mail$mailer->
send($message);
}catch(Exception $e){}}}}
3.创建插件配置类现在你已经具有发送电子邮件的代码, 你需要创建一个配置类, 该类将在以后注册时初始化该插件, sfErrorEmailNotifierPluginConfiguration.class.php的内容如下(yourproject / plugins / sfErrorEmailNotifierPlugin / config / sfErrorEmailNotifierPluginConfiguration.class.php):
<
?php/** * Plugin configuration. * * @packagesymfony * @subpackage sfErrorEmailNotifier * @authorCarlos Delgado <
dev@ourcodeworld.com>
*/class sfErrorEmailNotifierPluginConfiguration extends sfPluginConfiguration {public function initialize() {// Registrar a evento global de reporte de errores$this->
dispatcher->
connect('application.throw_exception', array('sfErrorEmailNotifier', 'notify'));
}}
4.启用插件最后, 要启用创建的插件, 你需要使用sfProjectConfiguration类(yourproject / config / ProjectConfiguration.class.php)中的enablePlugins方法将其添加到应用程序中:
<
?phprequire_once dirname(__FILE__) . '/../symfony-1.4.27/lib/autoload/sfCoreAutoload.class.php';
sfCoreAutoload::register();
class ProjectConfiguration extends sfProjectConfiguration {public function setup() {// 1. Enable plugin$this->
enablePlugins(array('sfErrorEmailNotifierPlugin'));
}}
将更改保存到文件中后, 使用php symfony cache:clear清除你的项目应用程序, 并且当你的应用程序中有未处理的异常时, 将发送一封电子邮件通知你有关该异常的信息(带有说明)。
编码愉快!
推荐阅读
- 电子邮件营销在2019年及以后的重要性
- 如何在Symfony 4中更改会话cookie的生存期(会话过期太早)
- 如何使用C#将XML文件/字符串渲染到Winforms中的TreeView组件中
- 考试实验室的首选(思科CCNA R&S考试准备的Web资源)
- 如何从硬盘驱动器恢复数据
- 为什么使用Salesforce DX对所有应用程序开发人员都很重要()
- spring|SpringBoot集成 WebService
- spring源码分析|spring初始化过程源码分析
- 使用与Android库提供的/ compileOnly依赖项