我正在尝试使用laravel观察器监听模型事件。问题是当我提交表单(更新或创建新记录)时,什么都没有发生。我错过了什么吗?
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,
];
}
型
7条答案
按热度按时间cnjp1d6j1#
对我来说,问题是在
register() method!
中注册观察者所以当我把它放进
boot() method
的时候,一切都运行得很好!原因是服务提供程序中运行方法的顺序,这些方法被称为hear希望有用
brjng4g32#
好吧,我找到了答案。所有的问题是当我在
CasesManagerServiceProvider.php
中添加use app\Observers\CasesObserver;
而不是use App\Observers\CasesObserver;
时。是的,App
的 Camel 案例是问题所在,所以我换成了应用程序,现在一切都很好。7xllpg7q3#
这似乎是对Composer和Laravel本身的滥用。
您应该通知他们您已经添加了一些文件和配置:
要自动加载文件,请执行以下操作:
字符串
要重新配置该高速缓存,请执行以下操作:
型
希望这对你也有帮助!
omhiaaxx4#
根据文档,这是不可能的。通过Eloquent发出批量更新或删除查询时。
的数据
1dkrff035#
在您的案例中不需要使用$dispatchesEvents。您应该尝试从模型中删除
$dispatchesEvents
,并从CasesObserver中删除__constructor()
。7jmck4yq6#
原因是您必须向模型添加
HasEvents
trait字符串
eoigrqb67#
请记住,Laravel官方文档中描述的大规模更新不会触发Eloquent模型事件,如'saving','saved','updating'和'updated'。例如:
字符串
作为解决方法,您可以先检索示例,然后手动更新字段。此方法将触发相关的Eloquent模型事件。下面是一个如何实现这一点的示例:
型
注:这可能是一个原因。在尝试了几次之后,我不得不阅读文档来了解为什么它不能执行。