Laravel:事件监听器通配符未触发

时间:2014-06-04 19:23:06

标签: php laravel-4 listener

我有一个使用通配符监听任何sentinel.user.*事件的事件监听器。

这是听众:

Event::listen('sentinel.user.*', function ($userID = null){
    error_log('log listener fired');
    $userLog           = new UserLog;
    $EventNameExploded = explode("." , Event::firing());
    $EventNameEnding   = array_pop($EventNameExploded);
    $logAction         = "User " . $EventNameEnding;
    $logData           = array('eventDescription' => $logAction);

    $userLog->submitLog($logData,$userID);
},99);

由于某些原因,这不会触发sentinel.user.forgot事件。它会触发任何其他sentinel.user事件。

在排除故障时,我为特定的sentinel.user.forgot事件添加了一个监听器:

Event::listen('sentinel.user.forgot', function (){
    error_log('forgot listener fired');
}, 98);

此事件侦听器将触发。我甚至给它一个低于日志事件的优先级,日志事件不会触发,但忘记特定的事件将触发。我甚至没有优先级高于9998的听众。

有谁知道听众没有解雇的原因???

编辑:

以下是触发sentinel.user.forgot事件的代码:

public function forgot()
{
    // Form Processing
    $result = $this->forgotPasswordForm->forgot( Input::all() );

    if( $result['success'] )
    {
        Event::fire('sentinel.user.forgot', array(
            'email'     => $result['mailData']['email'],
            'userId'    => $result['mailData']['userId'],
            'resetCode' => $result['mailData']['resetCode']
        ));

        // Success!
        Session::flash('success', $result['message']);
        return Redirect::route('home');
    } 
    else 
    {
        Session::flash('error', $result['message']);
        return Redirect::route('Sentinel\forgotPasswordForm')
            ->withInput()
            ->withErrors( $this->forgotPasswordForm->errors() );
    }
}

0 个答案:

没有答案