有些人可能从一开始了解yii的时候就产生过疑惑,console这个文件夹是干嘛的,然后打开过console文件夹,也看了目录下所有的文件,跟普通的应用相比,也并没有发现任何特殊之处。那这个应用到底干啥用的呢?
平时我们的开发都是构建在web应用之上,但是对于一些后台任务型的工作怎么处理呢?我们再说的简单一些,平时你接触到的定时发布,统计一些排名信息,再或者利用yii结合swoole跑任务等工作,都可以借助console应用来实现。
这节要说的东西不多,也不难,实现方式也很简单。但是此类需求却是很多人都会碰到的。
跟我来一起看下如何玩转console吧。
在 console\controllers 目录下创建一个继承 yii\console\Controller 类的控制器1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19<?php
namespace console\controllers;
use Yii;
use yii\console\Controller;
/**
* Test Console Application
*/
class TestController extends Controller
{
public function actionIndex ()
{
echo "This is my first console application.";
}
}
其调用形式跟普通的应用稍微有点区别,这个要我们在cli模式下通过命令调用。如果你还不清楚php的cli模式,可以点击这里去看看。
我们通过命令行切换到根目录下(console同级),执行./yii 命令发现列出来很多可用的命令,看最下面,我们发现有一列简单的介绍1
2- test Test Console Application
test/index (default)
这也正是我们刚刚在console\controllers目录下创建的TestController,它告诉我们test/index这条命令是可用的,我们调用下这个操作看看结果1
2$ ./yii test/index
This is my first console application.
直接在屏幕上输出了我们在TestController的index操作中echo的信息。
也就是说现在我们可以在cli模式下用yii执行命令了,感觉是不是很强大?
如果我们想通过cli向脚本中传入参数,怎么处理呢?
跟普通的shell一样,只需要在命令后,以空格的形式分开传入不同的参数,在操作中通过各个参数接收即可1
2
3
4
5
6
7public function actionIndex ($name, $age)
{
echo "name is {$name}\n";
echo "age is {$age}";
// echo "This is my first console application.";
return self::EXIT_CODE_NORMAL;
}
cli下调用1
2
3$ ./yii test/index zhangsan 20
name is zhangsan
age is 20
有同学注意到这里return了一个常量,self::EXIT_CODE_NORMAL,该值是0。在一般的shell写法中,exit(0)表示脚本正常执行成功,当然,这里你也可以通过return self::EXIT_CODE_ERROR表示你的脚本执行失败了。
既然是console应用,作为一个应用,你同样可以使用你比熟悉的AR对数据库进行操作,这个同普通的web应用并没有什么区别,我们也就不多说了。
不过要确信你能玩耍console了,我们后面会结合swoole来写一些文章,希望到时候不要发蒙哦。
有些基础较差的同学第一次接触console,可能还是没有体会到其好在哪里,为什么要这么写。留一个简单的任务课后自己动手实现,如何实现定时发布文章功能,可百度可google可留言可自己思考。