我想知道在Yii2中执行php init
命令时是否可以自动调用函数?
我有一个组件/扩展,它有一个我想在初始化Yii2应用程序时调用的函数。这个功能可以在任何地方注册,以便自动调用,甚至可以吗?
答案 0 :(得分:3)
init(Yii应用程序初始化工具)仅适用于高级应用程序模板,并以过程样式(非OOP)编写。
不幸的是,init
不会引发任何事件,因此您无法添加任何事件处理程序来执行自定义代码。
解决问题的最简单方法是修改init
文件本身,但这不是好习惯,因为框架更新可能会丢失更改(文件包含在框架核心中的git可跟踪文件中)。
我的建议是create separate console command处理,并在php init
之后立即执行:
php init your-custom-console-controller/action-name
如果您使用的是部署工具,例如Deployer,则可以在init之后轻松添加自定义命令以便执行。
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
忘记了部署项目所需的一切。
定义建议花一些时间学习它,这是值得的。