0

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

内部服务提供商:

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() 不是一个选项。

4

2 回答 2

0

我能想到两种解决方案。

A. 使用Model::saving()布尔值或其他简单逻辑来区分包。

B. 覆盖 save 方法并将逻辑放入该函数本身。

于 2013-11-08T15:42:24.577 回答
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);
  });
}
于 2013-11-08T21:12:45.610 回答