# 生命周期钩子

Blessing Skin 为插件提供了三个生命周期钩子,您可以利用这些生命周期钩子来为插件进行一些做准备或清理操作。所有的利用了钩子的代码都必须以数组的形式定义在插件根目录的 callbacks.php 文件里。

# callbacks.php

callbacks.php 文件应该返回一个键值对数组。键是生命周期事件的类,值是一个回调函数。回调函数的参数中可以带有含类型注解的参数,Blessing Skin 在执行这些钩子的时候会利用 Laravel 的服务容器去解析依赖并注入到参数中。 callbacks.php 大概像这样(已省略开头的 PHP 标记):

return [
    App\Events\PluginWasEnabled::class => function (App\Services\PluginManager $manager) {
        // 这里 $manager 就是 App\Services\PluginManager 的实例
  }
];

# 插件被启用

当插件被启用之后,App\Events\PluginWasEnabled 事件就会被触发。利用这个钩子,您可以进行一些初始化工作,例如检查环境、向数据库中创建数据表(不过记得要在创建前检查数据表是否已存在,重复建表会报错)等。

# 插件被关闭

当插件被关闭之后,App\Events\PluginWasDisabled 事件就会被触发。

# 插件即将被删除

管理员在「插件管理」页面对插件执行删除操作后,此时插件还没有被删除,会先触发 App\Events\PluginWasDeleted 事件。这里的事件命名有误导,从事件的名称上,它的含义是「插件已被删除」,但实际上仅仅是向插件发送「删除」信号,此时插件还没有被删除,等到事件触发完成之后,插件才被真正删除。

利用这个钩子,您可以进行一些清理工作。不过,从实践的角度上看,您在插件被启用时创建了什么,并不意味着在插件被删除时就要清理什么。举个例子,假设我们现在有个验证用户信息的插件,这个插件在被启用时向数据库中创建了数据表,随后记录了用户验证的信息。假如在插件被删除时将这个数据表删除掉,那么下次使用这个插件时,原来已经验证的用户就要重新验证。