是否有可能在执行php init时使Yii2调用函数?

时间:2016-02-05 08:42:58

标签: yii2 yii-extensions yii2-advanced-app yii-components

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

我有一个组件/扩展,它有一个我想在初始化Yii2应用程序时调用的函数。这个功能可以在任何地方注册,以便自动调用,甚至可以吗?

1 个答案:

答案 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

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

定义建议花一些时间学习它,这是值得的。