在Laravel 4中登记观察员的确切位置
当为模型观察者使用单独的类时,我应该在哪里注册观察者?文档中说要调用在Laravel 4中登记观察员的确切位置,laravel,model,observers,Laravel,Model,Observers,当为模型观察者使用单独的类时,我应该在哪里注册观察者?文档中说要调用User::observe(新的UserObserver)但我不确定在哪里做这件事最好 由于观察者只是您正在收听的事件的集合,因此我建议将其放置在Laravel建议您放置单个事件的位置:在模型本身的boot方法上 class User extends Eloquent { public static function boot() { parent::boot(); User::
User::observe(新的UserObserver)代码>但我不确定在哪里做这件事最好
由于观察者只是您正在收听的事件的集合,因此我建议将其放置在Laravel建议您放置单个事件的位置:在模型本身的boot
方法上
class User extends Eloquent
{
public static function boot()
{
parent::boot();
User::observe(new UserObserver);
}
}
将UserObserver
类放置在何处更为灵活,这取决于它最终的复杂程度
对于简单的观察者
如果每次应用程序运行时都可以加载它,请创建一个app/observators.php
文件,然后将其放在app/start/global.php
的末尾:
require app_path().'/observers.php';
或者,您可以使用composer自动加载该文件,方法是附加composer.json
:
{
"autoload": {
"classmap": [
//...
],
"files": [
"app/observers.php"
]
}
}
对于更复杂的观察者
如果您计划有许多不同的观察者,我建议您创建自己的名称空间,并让Laravel/Composer为您自动加载。为此,创建一个文件夹,如app/MyNamespace/observer
,然后将每个observer文件放在其中(每个文件的名称与类完全相同,即UserObserver.php
)
您的UserObserver.php
类现在应该如下所示:
<?php
namespace MyNamespace\Observers;
class UserObserver
{
public function saving($model)
{
// ...
}
public function saved($model)
{
// ...
}
}
或:
最后,编辑您的composer.json
,并添加您的命名空间以遵循PSR-0自动加载:
{
"autoload": {
"classmap": [
//...
],
"psr-0": [
"MyNamespace": "app/"
]
}
}
PS:编辑composer.json
后,别忘了运行composer dump autoload
,您复杂的方法对我来说非常有用。谢谢
use MyNamespace\Observers\UserObserver;
class User extends Eloquent
{
public static function boot()
{
parent::boot();
User::observe(new UserObserver);
}
}
{
"autoload": {
"classmap": [
//...
],
"psr-0": [
"MyNamespace": "app/"
]
}
}