我正在尝试向服务提供商注册事件,但我不断收到反射类错误。我查了也没找到解决办法,可能是核心的问题。
// 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');
}
}
$this->app->events->subscribe(new UserEventHandler);
触发正常,因为我可以到达 subscribe 方法,但是 $events->listen('auth .login', 'UserEventHandler@onUserLogin');
返回异常 UserEventHandler 类不存在
我在global.php上尝试了相同的代码并且工作正常,所以问题出在ServiceProvider上,我尝试了register()和boot()这两种方法并得到了相同的错误。
[已更新]
我发现在监听事件时需要专门指定完整的命名空间。
public function subscribe($events)
{
$events->listen('auth.login', 'App\Events\UserEventHandler@onUserLogin');
}
最佳答案
如果类与服务提供者位于不同的目录中,则需要声明该类的完整路径。
关于Laravel 4.1.* 在服务提供者中注册事件的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22623742/