Laravel:如何防止使用包内的事件进行雄辩的模型保存?

时间:2013-10-21 18:00:49

标签: php events laravel eloquent

我试图阻止模型保存到数据库,如果它在属性中具有特定值。

内部服务提供商:

public function register()
{
  $this->registerSaveRelated();
  $this->registerEvents();
}

public function registerEvents()
{
  $app = $this->app;

  $app['events']->listen('eloquent.saving*', function ($model) use ($app) {
    $app['my_service']->checkModel($model);
  });
}

public function registerSaveRelated(){
// More code...
正如预期的那样,

checkModel($model)被解雇了。但是,如果我返回false,则没有任何反应。该模型继续保存。这样做的正确方法是什么?

需要在包中完成,而不是模型。所以Model :: saving()不是一个选项。

2 个答案:

答案 0 :(得分:0)

我能想到两种解决方案。

一个。使用Model::saving()并使用布尔值或其他简单逻辑区分包。

B中。覆盖save方法并将逻辑放在该函数中。

答案 1 :(得分:0)

我认为你走在正确的轨道上。你是正确的checkModel需要返回true或false。然而,重要的部分是传递给listen的闭包返回的内容。这就决定了它是否存储。现在它没有返回任何东西。尝试添加return,如下所示:

public function registerEvents()
{
  $app = $this->app;

  $app['events']->listen('eloquent.saving*', function ($model) use ($app) {
    return $app['my_service']->checkModel($model);
  });
}