我有一个吉他课程,里面有一个练习桌。原始开发人员在ExercisePresenter中放置了一些函数来检索与练习相关的其他数据位,例如其URL。
这是ExercisePresenter中的一个函数,它返回一个练习的url:
public function url()
{
return '/guitar-lesson-ex/' . $this->urlName() . '/' . $this->id;
}
所以现在我正在创建一个关于新练习的事件,所以我可以使用推送器通知。在EventServiceProvider中我有:
public function boot(DispatcherContract $events)
{
parent::boot($events);
Exercise::created(function ($exercise) {
// need to update lesson difficulty
$lesid = $exercise->lesson_id;
$les = \App\Lesson::find($lesid);
$dif = $les->difficulty();
DB::table('lessons')
->where('id', $lesid)
->update(['difficulty' => $dif]);
// lets trigger NewExerciseEvent to send pusher notifications
$url = $exercise->url;
event(new NewExerciseEvent($message));
});
}
我认为上面的代码$url = $exercise->url;
会起作用,因为我看到$exercise->url
在练习视图中成功使用了。但它返回$ url为null。现在,练习数据库中没有url列,所以我想一下在视图中使用$exercise->url;
时,laravel正在确定ExercisePresenter能够返回url。
我正在通过PHPStorm进行调试,但是当我到达$url = $exercise->url;
并介入时,我只是通过各种laravel代码来寻找方法,等等。我不够精明地用laravel来计算在这里做什么不同于在视图中(太糟糕了,我们不能调试视图...),但每次我尝试这个$ url返回为null。
知道如何在我的EventServiceProvider中正常工作吗?
谢谢!
答案 0 :(得分:0)
想出来:
$url = $exercise->present()->url;
我一直在寻找如何使用演示者,但刚刚阅读(Laravel View Presenters From Scratch),一切都很清楚!
抱歉过早发布。