我想在我的控制器(使用Silex)抛出异常时发送电子邮件。我试图创建一个函数来重复使用这个电子邮件功能。 我无法正常访问此功能。
我尝试创建一个服务(有疙瘩),但它不起作用。
如何正确创建服务或功能?
//MY CONTROLLER
$json->post('/mycontroller', function (Request $request) use ($app) {
$app['db']->beginTransaction();
try {
$data = json_decode($request->getContent(), true);
$app['db']->insert('table', $data);
//PHP CODE
$return = ['result' => $app['db']->lastInsertId()];
$app['db']->commit();
return $app->json($return);
} catch (Exception $e) {
emailError($e, $data, $request);
return $app->json(['error' => 'error']);
}
});
//EMAIL ERROR FUNCTION
$emailError = function ($e, $data, $request = null) use ($app) {
//recupération de l'utilisateur
$sql = 'SELECT ... WHERE id = ?';
$result = $app['db']->fetchAssoc($sql, array('idvalue'));
$title = 'TITLE - ' . $request->getPathInfo() . '';
$message =
'path ' . $request->getPathInfo() . "\r\n" .
'sql result :' . $result['column'] . "\r\n" .
'data :' . json_encode($data) . "\r\n" .
"\r\n \r\n" .
$e->getMessage() . "\r\n" .
$e->getFile() . "\r\n" .
$e->getLine() . "\r\n" .
$e->getCode() . "\r\n" .
$e->getPrevious() . "\r\n" .
$e->getTraceAsString();
mail('email@domaine.com', $title, $message);
};
//SERVICE TRY
$app['emailError'] = $app->share(function ($e, $data, $request = null) use ($app) {
//emailError function code
});
答案 0 :(得分:0)
你应该在传递给share方法的函数中返回对象,share方法的目的是按需创建和初始化一个对象副本
例如:
class MyEmailError {
protected $app;
public function __construct($app) {
$this->app = $app;
}
public function mail($e, $data, $request = null) {
// your code
}
}
$app['MyEmailError'] = $app->share(function() use($app) {
return new MyEmailError($app);
});
$app['MyEmailError']->mail(...);
$app['MyEmailError']->mail(...);