yii创建控制台命令
创建控制台命令程序
1、控制台命令继承自 yii\console\Controller控制器类
2、在控制器类中,定义一个或多个动作,动作与控制台子命令相对应
3、在动作方法中实现业务需求的代码
运行控制台命令程序
1、通过执行应用根目录yii脚本执行
2、脚本命令后跟指定的路由:控制器ID/动作ID
一个控制台命令demo:
首先在 console/controllers目录项目创建一个 HelloController.php 文件
namespace console\controllers;
use Yii;
use yii\console\Controller;
class HelloController extends Controller
{
public function actionTest()
{
echo "Hello World \n";
}
}
如果需要执行,先切换到根目录,然后执行控制台命令
yii hello/test 即可
带参数的控制台命令程序
1、控制台命令程序可以接受参数,参数将传递个命令对应的动作方法;
2、第一个参数对应第一个参数,第二个参数对应第二个参数,依次类推
3、可以使用数组作为参数,数组参数用逗号隔开字符串生成;
4、如果没有足够的参数,会提示出错,除非参数设定了默认值。
namespace console\controllers;
use Yii;
use yii\console\Controller;
class HelloController extends Controller
{
/**
* @purpose 控制台命令传入单个参数
* @param $name
*/
public function actionWho($name)
{
echo "Hello $name \n";
}
/**
* @purpose 控制台命令传入的参数为数组
* @param $names
*/
public function actionAll(array $names)
{
var_dump($names);
}
}
1、传入单个参数: yii hello/who daicr
2、传入的参数为数组:yii hello/all daicr ,gy
带有选项的控制台命令程序
1、覆盖在 yii\console\Controller::options() 中的方法,这个方法应该返回控制器类的属性列表
2、当运行一个命令时,使用语法为:--optionName=optionValue 来传递给对应的属性,值 optionValue警徽分配到optionName属性
3、自Yii2.0.8之后,可用用 optionAliases() 方法来增加选项别名,从而简化命令中选项的输入
namespace console\controllers;
use Yii;
use yii\console\Controller;
class HelloController extends Controller
{
public $rev = ''; // 定义参数
/**
* @purpose 覆盖在 yii\console\Controller::options() 中的方法,返回控制器类的属性列表
* @return array
*/
public function options()
{
return ['rev'];
}
/**
* @purpose 增加选项别名(Yii2.0.8之后)
* @return array
*/
public function optionAliases()
{
return ['r' => 'rev'];
}
public function actionDemo()
{
if($this->rev == 1){
echo strrev('hello world') . "\n";
}else{
echo "hello world \n";
}
}
}
使用控制台选项: yii hello/demo --r=1