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

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

《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 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年前 评论

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