Laravel取消对象的创建

时间:2018-04-27 06:32:22

标签: laravel events

我有一个Laravel应用程序,它有一个通过表单创建的对象Position。

class Position extends Model
{
    protected $dispatchesEvents = [
        'creating' => PositionCreating::class,
    ];

这会调用我已经测试过的PositionCreating类的事件,并且正在触发。底层代码也可以为我提供成功或失败标准。

class PositionCreating
{
use Dispatchable, InteractsWithSockets, SerializesModels;
public function __construct(Position $position)
{
    if (some_good_stuff())
    {
    //keep creating the object
    } else {
    //stop creating the object
    }
}

如果它有效,那很好,我只是让__construct()函数完成执行,所有内容,包括我想要的预执行代码,都能很好地工作。

但我不知道如何实际停止创建对象。我当然可以使用dd()函数或其他东西(它按预期工作并停止创建对象),但我希望以友好的方式向用户呈现可读错误。我应该使用哪些函数或命令来取消创建对象以返回到我的position.create方法?

1 个答案:

答案 0 :(得分:0)

答案有点晚,但这是一种解决方法。模型会引发多个事件。您正在寻找的可能是“创建”事件。每个模型事件都会收到模型的一个实例,因此您可以将事件附加到模型上,如下所示:

protected $dispatchesEvents = [
    'created' => PositionCreated::class,
];

在您的“ PositionCreated”事件中,添加一个公共属性以获取模型实例,如下所示:

 public $position;
 public function __construct(Position $position)
 {
      $this->position=$position; 
 }

最后,只需在事件监听器中的“处理”方法上添加逻辑即可。

public function handle($event)
{
    if($something)
    {
        $event->position->delete();
    }
}

这应该可以完成。您可以检查另一个events,然后看看哪一个最适合您。