在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/"
        ]
    }
}