laravel观察员不工作

时间:2018-02-01 13:52:12

标签: php laravel laravel-5.3

我正在尝试使用laravel observers收听模型事件。问题是当我提交表单(更新或创建新记录)时,什么也没发生。我想念一些东西吗?

app.php

  'providers' => [
        ...
         App\Providers\CasesManagerServiceProvider::class,
]

CasesManagerServiceProvider.php

class CasesManagerServiceProvider extends ServiceProvider
{

    public function boot( )
    {

        Cases::observe(CasesObserver::class);
    }

    public function register()
    {

    }

}

CasesObserver.php

class CasesObserver
{
    private $cases;

    public function __construct(Cases $cases){
        $this->cases = $cases;
  }


    public function creating(Cases $case)
    {
        dd('creating');
    }

    public function saved(Cases $case)
    {
        dd('saved');
    }

    public function updating($case)
    {
        dd('updating');
    }
    public function updated($case)
    {
        dd('updated');
    }
}

Cases.php

class Cases extends Model
{
    const UPDATED_AT = 'modified_at';

    protected $dispatchesEvents = [
    'updating' => CasesObserver::class,
    'updated'  => CasesObserver::class,
    'creating' => CasesObserver::class,
    'saved'    => CasesObserver::class,
];
}

5 个答案:

答案 0 :(得分:4)

对我来说,问题在于在register() method!中注册观察员
因此,当我将其放入boot() method时,一切正常!原因是hear

中提到的服务提供商中运行方法的顺序

希望有用

答案 1 :(得分:1)

在您的情况下,您不需要使用$ dispatchesEvents。您应该尝试从model中删除$ dispatchesEvents,并从CasesObserver中删除__constructor()。

答案 2 :(得分:1)

好的,我找到了答案。所有的问题都是我加入的时候 use app\Observers\CasesObserver;中的CasesManagerServiceProvider.php代替use App\Observers\CasesObserver;。 是的App的Camel案例是问题所在,所以我改为App,现在一切正常。

答案 3 :(得分:1)

这似乎是对Composer和Laravel本身的滥用。

您应告知他们您已添加了一些文件和配置:

要自动加载文件:

composer dump

要重新配置缓存:

php artisan config:cache

希望这对您也有帮助!

答案 4 :(得分:0)

原因是您必须向模型添加 HasEvents 特征

<?php

use Illuminate\Database\Eloquent\Concerns\HasEvents;

class MyModel extends Model
{
    use HasEvents;

    //your code goes here
}