为什么我的特质靴不叫?

时间:2018-07-10 19:48:13

标签: laravel

在我的phpunit测试中,我正在更新值:

/** @test */
public function it_updates_newsletter_when_user_privacy_is_updated() 
{

    $privacy = create('App\UserPrivacy', ['user_id' => auth()->id()]);

    $privacy->update(['firstname' => 'Philipp']);

}

我正在尝试捕获特征中的更新事件。但事实是,它从来没有被人称为。这是特征:

trait UpdatesNewsletter
{
    /**
     * Boot the trait.
     */
    protected static function bootUpdatesNewsletter()
    {
        if (auth()->guest()) return;

        static::updated(function ($model){
            var_dump('is called by trait');
        });

    }
}

就我的健全性检查而言,我为模型本身编写了事件捕获。

class UserPrivacy extends Model
{
    use UpdatesNewsletter;

     /**
      * Boot the model.
      */
    protected static function boot()
    {
        parent::boot();

        static::updated(function ($privacy){
            var_dump('is called by class');
        });
    }
}

在控制台中,我仅看到一条消息:

string(18) "is called by class"

我在做什么错了?

1 个答案:

答案 0 :(得分:0)

这很奇怪,仅在这种情况下,我才以某种方式没有auth会话。

protected static function bootUpdatesNewsletter()
{
    static::updated(function ($model){
        if (auth()->guest()) return;   // at this point you have access to auth()->user etc
        var_dump('is called by trait');
    });

}