Yii创建cli应用

有时我们并不希望某个方法被外部访问,这时可以使用cli脚本来解决这个问题。相对于web应用,外界无法访问cli脚本。另外执行cli应用不需要经过web前端软件(nginx/apache)转发,直接php解析执行,效率更高。

Yii原生支持cli应用,即console应用。protected文件夹下的yiic文件,这是cli应用的入口文件。cli应用的默认配置文件是protected/configs/console.php。根据YII的规定,yii框架的cli程序必须位于protected/commands文件夹下。然而这个文件夹默认是没有生成的,我们需要自己新建。

yii的cli应用类必须继承自 CConsoleCommand ,在其中可以定义各种action,同正常的controller一样使用。由于action是在1.1.5之后新增的,在这之前需要实现的是run方法。将configs/console.php配置好后, 下面是一个cli程序的示例:

class TestCommand extends CConsoleCommand
{
    public function run()
    {
        echo Yii::getVersion(), PHP_EOL;
    }
}

将工作目录切换到protected下,执行 ./yiic test 即可看到输出。

在yii 1.1.5之后的版本支持和controller类似的action方法,这个时候就可以不在实现run方法了,上述代码可以改造如下:

class TestCommand extends CConsoleCommand
{
    public function actionVersion()
    {
        echo Yii::getVersion(), PHP_EOL;
    }

    public function actionBasePath()
    {
        echo Yii::app()->basePath, PHP_EOL;
    }
}

在protected目录下运行 ./yiic test version 命令即可看到同样的输出。

注意 run 方法和其他action方法不能同时存在一个command类目里面。yii目前的规则是如果有run方法就直接执行run方法内容,不管后面传入的是什么。例如对于上例,如果有 run 方法的存在,那么 version 方法和 basePath 方法就不再其作用,即使已经显示的指明了action方法: ./yiic test version

如果没有run方法,cli程序和正常controller一样,执行默认的index方法。为了程序的复用和分类管理,建议使用action方法而非实现run方法。

留言评论

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注

Captcha Code