使用silex异常时发送电子邮件错误

时间:2015-12-17 15:19:21

标签: php silex

我想在我的控制器(使用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
});

1 个答案:

答案 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(...);