Laravel - 捕捉所有雄辩的请求

时间:2016-08-07 11:24:29

标签: php laravel events eloquent

我们可以阅读here,我们可以收听有说服力的事件并在AppServiceProvider中使用它。它是这样的:

public function boot()
{
    User::creating(function ($user) {
        Log::create(['message' => 'create method']);
    });

    User::deleting(function ($user) {
        Log::create(['message' => 'delete method']);
    });
}

对于我所有雄辩的模型,我想在创建数据库时创建数据库并创建数据库。这意味着我需要复制粘贴此代码段20次并仅更改User::creating部分。

有没有办法可以捕捉所有模型中的雄辩事件并做出类似的事情:

public function boot()
{
    AllModels::creating(function ($model) { // <--- something like this here?
        Log::create([
            'message' => 'create method',
            'model' => get_class($model) // <--- and then get the class name
        ]);

    AllModels::deleting(function ($user) {
       /***/
    }

    });
}

1 个答案:

答案 0 :(得分:1)

您可以尝试这样的事情:

$models = ['User', 'Post', 'Comment', ....];
foreach ($models as $model) {
    $model::creating(....);
    $model::deleting(....);
}

类似的方法对我有用(虽然我使用的是DI而不是外墙)。

我在前一段时间找到并添加了书签的另一种方法:

Event::listen(['eloquent.creating: *'], function() {
    ....
});