是否可以让 Yii2 在执行 php init 时调用一个函数?

Is it possible to make Yii2 call a function when executing php init?

我想知道在Yii2中是否可以在执行php init命令时自动调用一个函数?

我有一个 component/extension,它有一个函数,我只想在 Yii2 应用程序初始化时调用它。这个函数是否可以在任何地方注册以便自动调用,甚至可以吗?

init(Yii 应用程序初始化工具)仅适用于高级应用程序模板,并以过程式风格(非 OOP)编写。

遗憾的是,init 不会引发任何事件,因此您无法添加任何事件处理程序来执行自定义代码。

解决问题的最简单方法是修改 init 文件本身,但这不是好的做法,因为更改可能会在框架更新时丢失(文件包含在 git 中的可跟踪文件中框架核心)。

我的建议是 create separate console command 处理并在 php init 之后立即执行:

php init your-custom-console-controller/action-name

如果您正在使用部署工具,例如 Deployer,您可以轻松地添加您的自定义命令,以便在初始化后立即执行。

Yii2 高级应用程序模板的配方exists,因此您可以像这样添加自定义命令:

task('deploy:your_custom_command', function () {
    cd('{{release_path}}');    
    run('php yii your-custom-console-controller/action-name');
});

after('deploy:init', 'deploy:your_custom_command');

那么你只需 运行:

dep deploy production

忘记部署项目所需的一切。

绝对推荐花点时间学习,值得。