【问题标题】:Prevent action from Laravel observer events防止来自 Laravel 观察者事件的操作
【发布时间】:2018-10-05 14:07:15
【问题描述】:

我想知道如何防止模型观察者上的操作,例如:

$model->update(['foo' => 'bar']);

在观察者中

public function updating(Model $model)
{
    if($model->isDirty('foo') {
        // Prevent action from happening
    }
}

提前谢谢你。

【问题讨论】:

    标签: php laravel observers laravel-5.6 php-7.2


    【解决方案1】:

    你可以简单地返回 false。

    如文档中所述。 http://laravel.com/docs/5.6/events#defining-listeners.

    有时,您可能希望停止将事件传播给其他侦听器。您可以通过从侦听器的句柄方法返回 false 来做到这一点。

    此操作不会更新记录/模型。

    public function updating(Model $model)
    {
        if ($model->isDirty('foo')) {
           // Prevent action from happening
           return false;
        }
    }
    

    虽然模型实例值得到了更新,但这些值并没有在数据库中更新,所以在将实例返回到视图或 API 时要小心。为了解决这个问题,您可以使用getOriginal()

    希望这会有所帮助。

    【讨论】:

    • 这很简单,但我在任何地方都没有找到它,你知道提到这个的任何资源吗?非常感谢
    • @Asur 如果您深入研究源代码,您会找到一个。 :D
    • @Asur 虽然模型实例值已更新,但这些值并未在数据库中更新,因此在将实例返回到视图或 API 时要小心
    • 您可以查看here
    • 这在文档@laravel.com/docs/5.6/events#defining-listeners 中有所提及。 Stopping The Propagation Of An Event - Sometimes, you may wish to stop the propagation of an event to other listeners. You may do so by returning false from your listener's handle method.
    猜你喜欢
    • 2014-12-12
    • 2019-04-17
    • 2011-01-23
    • 1970-01-01
    • 2020-09-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多