我有一个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方法?
答案 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,然后看看哪一个最适合您。