多个Laravel可引导特性不工作

blmhpbnm  于 2023-06-25  发布在  其他
关注(0)|答案(2)|浏览(104)

在同一事件中使用多个 Boot trait将只触发第一个trait,而忽略其余的可引导trait。

class Tag extends Model
{
    use HasKey; // this will work (but if i put it bellow it will not work)
    use HasSlug; // this's not (but if i put it above it will work)
}
trait HasKey
{
    public static function bootHasKey()
    {
        static::creating(
            fn (Model $model) => $model->key = 'value'
        );
    }
trait HasSlug
{
    public static function bootHasSlug()
    {
        static::creating(
            fn (Model $model) => $model->slug = 'value'
        );
    }
}
voase2hg

voase2hg1#

我发现目前还不支持它,也许在Laravel的未来版本中!
https://github.com/laravel/framework/issues/40645#issuecomment-1022969116

agyaoht7

agyaoht72#

尝试使用闭包而不是箭头函数,如下所示:

trait HasKey
{
    public static function bootHasKey()
    {
        static::creating(
            function (Model $model) { $model->key = 'value'; }
        );
    }
}
trait HasSlug
{
    public static function bootHasSlug()
    {
        static::creating(
            function (Model $model) { $model->slug = 'value'; }
        );
    }
}

因为箭头函数总是返回一个值,所以laravel会在执行第一个事件处理程序后停止事件传播。
你可以在这里看到源代码

相关问题