当为模型观察者使用单独的类时,我应该在哪里注册观察者?文档中说要调用User::observe(新的UserObserver)但我不确定在哪里做这件事最好
https://laravel.com/docs/5.4/eloquent#observers
由于观察者只是您正在收听的事件的集合,我要说的是,将其放置在Laravel建议您放置单个事件的位置:在模型本身的boot方法上
类用户扩展雄辩
{
公共静态函数boot()
{
父::boot();
用户::观察(新用户观察者);
}
}
将UserObserver类放置在何处更为灵活,这取决于它最终的复杂程度
对于简单的观察者
如果每次应用程序运行时都可以加载它,请创建一个app/observators.php文件,然后将其放在app/start/global.php的末尾:
需要app_path()。/observators.php';
或者,您可以使用composer自动加载该文件,方法是附加composer.json:
{
“自动加载”:{
“类映射”:[
//...
],
“文件”:[
“app/observators.php”
]
}
}
对于更复杂的观察者
如果您计划有许多不同的观察者,我建议您创建自己的名称空间,并让Laravel/Composer为您自动加载。为此,创建一个文件夹,如app/MyNamespace/observer,然后将每个observer文件放在其中(每个文件的名称与类完全相同,即UserObserver.php)
您的UserObserver.php类现在应该如下所示:
<;?php
名称空间MyNamespace\Observators;
类用户观察者
{
公共功能节约($model)
{
// ...
}
已保存的公共功能($model)
{
// ...
}
}
无论何时使用,都必须声明完整类:
User::observe(新的MyNamespace\obsers\userobsers);
或:
使用MyNamespace\Observer\UserObserver;
类用户扩展了雄辩的
{
公共静态函数boot()
{
父::boot();
用户::观察(新用户观察者);
}
}
最后,编辑您的composer.json,并添加您的命名空间以遵循PSR-0自动加载:
{
“自动加载”:{
“类映射”:[
//...
],
“psr-0”:[
“MyNamespace”:“app/”
]
}
}
PS:编辑composer.json后,不要忘记运行composer dump autoload