L5.5 模型观察者怎么不执行?
大概想实现的就是用户积分发生变化的时候给用户发送通知
一共是3个文件:用户积分模型,观察者,修改 AppServiceProvider.php 里注册,(管理后台使用积分模型)更改用户积分的时候,没有反应,没有报错,也没执行观察者内的逻辑,我自己手动添加日志,也没有进入。
观察者代码
namespace App\Observers;
use App\Models\Point;
use Illuminate\Support\Facades\DB;
class PointObserver
{
private $client_id = '';
private $encryption_key = '';
private function send_msg(Point $point)
{
//TODO 执行发送逻辑
addlog('执行发送逻辑');
}
function created(Point $point) {
addlog('进入 created');
$this->send_wechat_tmpl_msg($point);
}
function saved(Point $point) {
addlog('进入 saved');
$this->send_wechat_tmpl_msg($point);
}
function updated(Point $point) {
addlog('进入 updated');
$this->send_wechat_tmpl_msg($point);
}
function deleted(Point $point) {
addlog('进入 deleted');
$this->send_wechat_tmpl_msg($point);
}
AppServiceProvider.php 里在boot 内注册:
<?php
namespace App\Providers;
use Illuminate\Support\ServiceProvider;
use App\Models\Point;
use App\Observers\PointObserver;
class AppServiceProvider extends ServiceProvider
{
/**
* Bootstrap any application services.
*
* @return void
*/
public function boot() {
Point::observe(PointObserver::class);
}
/**
* Register any application services.
*
* @return void
*/
public function register()
{
//
}
}
请教是不是缺少了什么步骤顺便请教怎么调试
关于 LearnKu
Point Model 是 Eloquent Model 嗎
@leochien 对额,你看代码,我都引用那个Point 模型了
@大师兄 可以提供 Point Model 嗎目前沒看出什麼異狀
@leochien 感谢你的耐心,积分模型代码如下:
是不是通过 Eloquent 执行批量操作了?
@Amos1st 没有,积分后台其实就只有管理手动给一个用户增加的操作,批量删除、更新都没有的。
@大师兄 可以贴一下point的操作部分的代码么
@Amos1st 在4楼
@大师兄 不是模型的部分呀,没有改动point的控制器部分么
@Amos1st 不好意思,理解错了,代码有的,就是管理员后台手动给用户添加积分
@大师兄 试试用create吧,insert是可以批量操作的
https://learnku.com/docs/laravel/5.5/eloqu... 可以看看文档哈 :smile:
@Amos1st 非常感谢,应该就是你说的这个问题,我现在试一下。
@大师兄 不客气,可以解决就好 :smile:
好像还是不能,现在按照手册,改用save方法
这样还是没有进入观察者,改造成数组然后用了create方法也是一样。
这样也不行是吧?
@Ken 是的
解决了吗?我也遇到了
你试试将观察者代码中只保留
function created(Point $point) {
addlog('进入 created');
$this->send_wechat_tmpl_msg($point);
}
其他方法删掉
重新执行 composer dumpautoload, 有可能是你的Model 是新建的,classmapping class 还未找到……
我目前是5.8的laravel,使用的时候需要在boot方法中继承父类的boot方法
你可以试试看
@kangfq 兄弟 lumen5.8 在此终于解决!
@amazingzl 建议还是使用服务提供者统一观察所有模型,这样管理也方便