parent::boot () 方法何时需要用呢?

看到有的Eloquent模型里boot方法里用了parent::boot(),上网查只说到"make the model booted",那booted后的模型有什么用呢?

《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
最佳答案

你可以看一下框架代码,里面是如何使用 boot() 方法的。举个例子:

    public static function boot()
    {
        parent::boot();

        static::updating(function (Balance $model) {
              // ...
        });

        static::updated(function (Balance $model) {
            // ...
        });
    }

在我们的模型类里重写 static 的 boot 方法,能够给每个实例化的模型都挂载上特定事件。

另外,Eloquent 的 boot 方法(也就是以上例子中调用的 parent::boot())还会调用 bootTraits() 方法,该方法使用 class_uses_recursive() 函数来遍历某个类加载的所有 Trait,并调用每个 Trait 各自的 bootTraitName() 方法,因此可以实现一个模型引用多个不同的 Trait,每个 Trait 又挂载了不同的事件,从而实现给模型添加不同的「能力」(你可以注意到很多 Eloquent 扩展提供的 Trait 都使用 -able 词缀命名)。

5年前 评论
讨论数量: 1

你可以看一下框架代码,里面是如何使用 boot() 方法的。举个例子:

    public static function boot()
    {
        parent::boot();

        static::updating(function (Balance $model) {
              // ...
        });

        static::updated(function (Balance $model) {
            // ...
        });
    }

在我们的模型类里重写 static 的 boot 方法,能够给每个实例化的模型都挂载上特定事件。

另外,Eloquent 的 boot 方法(也就是以上例子中调用的 parent::boot())还会调用 bootTraits() 方法,该方法使用 class_uses_recursive() 函数来遍历某个类加载的所有 Trait,并调用每个 Trait 各自的 bootTraitName() 方法,因此可以实现一个模型引用多个不同的 Trait,每个 Trait 又挂载了不同的事件,从而实现给模型添加不同的「能力」(你可以注意到很多 Eloquent 扩展提供的 Trait 都使用 -able 词缀命名)。

5年前 评论

你可以看一下框架代码,里面是如何使用 boot() 方法的。举个例子:

    public static function boot()
    {
        parent::boot();

        static::updating(function (Balance $model) {
              // ...
        });

        static::updated(function (Balance $model) {
            // ...
        });
    }

在我们的模型类里重写 static 的 boot 方法,能够给每个实例化的模型都挂载上特定事件。

另外,Eloquent 的 boot 方法(也就是以上例子中调用的 parent::boot())还会调用 bootTraits() 方法,该方法使用 class_uses_recursive() 函数来遍历某个类加载的所有 Trait,并调用每个 Trait 各自的 bootTraitName() 方法,因此可以实现一个模型引用多个不同的 Trait,每个 Trait 又挂载了不同的事件,从而实现给模型添加不同的「能力」(你可以注意到很多 Eloquent 扩展提供的 Trait 都使用 -able 词缀命名)。

5年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!