Laravel 4.1.*在服务提供商处注册事件

Rod*_*roz 4 laravel laravel-4

我正在尝试向服务提供商注册事件,但我不断收到反射类错误.我搜索过并找不到解决方案,也许这是核心问题.

// AppServiceProvider.php

<?php namespace App;

use Illuminate\Support\ServiceProvider;
use App\Events\UserEventHandler;

class AppServiceProvider extends ServiceProvider {

    public function register() {

        // Events
        $this->app->events->subscribe(new UserEventHandler);

    }

}

// UserEventHandler.php

<?php namespace App\Events;

class UserEventHandler {

/**
 * Handle user login events.
 */
public function onUserLogin($event)
{
    echo 'subscriber logged in'; exit;
}

/**
 * Register the listeners for the subscriber.
 *
 * @param  Illuminate\Events\Dispatcher  $events
 * @return array
 */
public function subscribe($events)
{
    $events->listen('auth.login', 'UserEventHandler@onUserLogin');
}

}
Run Code Online (Sandbox Code Playgroud)

$this->app->events->subscribe(new UserEventHandler);正好点火,因为我可以到达subscribe方法,但是 $events->listen('auth.login', 'UserEventHandler@onUserLogin');返回异常Class UserEventHandler does not exist

我在global.php上尝试了相同的代码并且工作正常,所以问题出在ServiceProvider上,我尝试了两种方法register()和boot()并得到了同样的错误.

[更新]

我发现在监听事件时你需要专门指定完整的命名空间.

public function subscribe($events)
{
    $events->listen('auth.login', 'App\Events\UserEventHandler@onUserLogin');
}
Run Code Online (Sandbox Code Playgroud)

小智 5

如果它位于与服务提供者不同的目录中,则需要声明该类的完整路径.