Laravel 5.2 - 如何在EventServiceProvider中访问App Presenter方法?

时间:2017-08-01 15:10:15

标签: laravel laravel-5

我有一个吉他课程,里面有一个练习桌。原始开发人员在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中正常工作吗?

谢谢!

1 个答案:

答案 0 :(得分:0)

想出来:

$url = $exercise->present()->url;

我一直在寻找如何使用演示者,但刚刚阅读(Laravel View Presenters From Scratch),一切都很清楚!

抱歉过早发布。