YII2框架使用控制台命令的方法分析


Posted in PHP onMarch 18, 2020

本文实例讲述了YII2框架使用控制台命令的方法。分享给大家供大家参考,具体如下:

有些时候我们需要通过crontab在后台跑一些定时脚本,这时候就需要用到控制台命令了。

我们在commands目录下创建TestController.php,当然脚本的位置是可以随意指定的,只需要在config/console.php中配置好就行。

$config = [
	'controllerNamespace' => 'app\commands',
];

TestController.php代码如下:

<?php

namespace app\commands;

use YII;
use yii\console\Controller;
use yii\console\ExitCode;
use yii\helpers\Console;

//注意控制台程序必须继承自yii\console\Controller
class TestController extends Controller
{
  public $param1;
  public $param2;
  public $param3;

  //指定用于控制台的选项
  public function options($actionID)
  {
    return [
      'param1',
      'param2',
      'param3',
    ];
  }

  //如果这些选项名称太长,可以取个短的别名
  public function optionAliases()
  {
    return [
      'p1' => 'param1',
      'p2' => 'param2',
      'p3' => 'param3',
    ];
  }

  // 定义控制台运行的方法
  // yii test/test1 -p1=hello -p2=world -p3=!!!
  public function actionTest1()
  {
    echo $this->param1, ' ', $this->param2, ' ', $this->param3, "\n";
    return ExitCode::OK;
  }

  // 我们可以获取控制台传过来的参数
  // 注意,函数第一个参数,对应控制台传过来的第一个参数,依次类推,不要把顺序搞错了。
  // yii test/test2 aa bb cc
  public function actionTest2($p1 = '', $p2 = '', $p3 = '')
  {
    echo $p1, ' ', $p2, ' ', $p3, "\n";
    return ExitCode::OK;
  }

  // 当然控制台也可以一次传多个数据过来,这就需要把函数参数声明为一个array
  // 控制台传参时就需要把传递的数据通过逗号连接起来,YII2通过处理变成数组
  // yii test/test3 aa,bb,cc
  public function actionTest3(array $arr)
  {
    echo implode('--', $arr), "\n";
    return ExitCode::OK;
  }

  // 控制台格式和颜色的设置
  // yii test/test4
  public function actionTest4()
  {
    //用于控制台输出
    $this->stdout('hello', Console::FG_RED);
    $this->stdout('world', Console::FG_GREEN);
    $this->stdout('!!!', Console::FG_BLUE);
    echo "\n";

    $hello = $this->ansiFormat('hello', Console::FG_RED);
    $world = $this->ansiFormat('world', Console::FG_GREEN);
    $sigh = $this->ansiFormat('!!!', Console::FG_BLUE);
    echo $hello, ' ', $world, ' ', $sigh, "\n";
    return ExitCode::OK;
  }
}

运行结果如下:

YII2框架使用控制台命令的方法分析

注意,windows下的命令行不会显示颜色。

希望本文所述对大家基于Yii框架的PHP程序设计有所帮助。

PHP 相关文章推荐
PHP安全配置
Oct 09 PHP
PHP循环获取GET和POST值的代码
Apr 09 PHP
编写Smarty插件在模板中直接加载数据的详细介绍
Jun 26 PHP
使用pthreads实现真正的PHP多线程(需PHP5.3以上版本)
May 05 PHP
php+mysql大量用户登录解决方案分析
Dec 29 PHP
PHP实现事件机制实例分析
Jun 26 PHP
thinkphp在php7环境下提示Cannot use ‘String’ as class name as it is reserved的解决方法
Sep 30 PHP
ThinkPHP简单使用memcache缓存的方法
Nov 15 PHP
Laravel中的Auth模块详解
Aug 17 PHP
thinkPHP中钩子的使用方法实例分析
Nov 16 PHP
php菜单/评论数据递归分级算法的实现方法
Aug 01 PHP
Laravel手动返回错误码示例
Oct 22 PHP
YII2框架中添加自定义模块的方法实例分析
Mar 18 #PHP
YII2框架中日志的配置与使用方法实例分析
Mar 18 #PHP
YII2框架中查询生成器Query()的使用方法示例
Mar 18 #PHP
YII2框架中使用RBAC对模块,控制器,方法的权限控制及规则的使用示例
Mar 18 #PHP
Laravel框架下的Contracts契约详解
Mar 17 #PHP
使用Entrust扩展包在laravel 中实现RBAC的功能
Mar 16 #PHP
PHP代码加密的方法总结
Mar 13 #PHP
You might like
php+dbfile开发小型留言本
2006/10/09 PHP
php去除重复字的实现代码
2011/09/16 PHP
php创建和删除目录函数介绍和递归删除目录函数分享
2014/11/18 PHP
Js 时间函数getYear()的使用问题探讨
2013/04/01 Javascript
利用JS延迟加载百度分享代码,提高网页速度
2013/07/01 Javascript
String.prototype实现的一些javascript函数介绍
2013/11/22 Javascript
Jquery的Tabs内容轮换效果实现代码,几行搞定
2014/02/12 Javascript
javascript学习笔记(八)正则表达式
2014/10/08 Javascript
10条建议帮助你创建更好的jQuery插件
2015/05/18 Javascript
JS实现的不规则TAB选项卡效果代码
2015/09/18 Javascript
AngularJS使用ng-class动态增减class样式的方法示例
2017/05/18 Javascript
浅析vue深复制
2018/01/29 Javascript
使用veloticy-ui生成文字动画效果
2018/02/08 Javascript
nodejs基于express实现文件上传的方法
2018/03/19 NodeJs
JS数组中对象去重操作示例
2019/06/04 Javascript
node.js express捕获全局异常的三种方法实例分析
2019/12/27 Javascript
Python中使用logging模块代替print(logging简明指南)
2014/07/09 Python
python编写网页爬虫脚本并实现APScheduler调度
2014/07/28 Python
python计算auc指标实例
2017/07/13 Python
python Spyder界面无法打开的解决方法
2018/04/27 Python
推荐10款最受Python开发者欢迎的Python IDE
2018/09/16 Python
详解opencv Python特征检测及K-最近邻匹配
2019/01/21 Python
python2.7使用plotly绘制本地散点图和折线图
2019/04/02 Python
python 扩展print打印文件路径和当前时间信息的实例代码
2019/10/11 Python
基于python 等频分箱qcut问题的解决
2020/03/03 Python
HTML5 常见面试题之PC端和移动端区别介绍
2018/01/22 HTML / CSS
phpquery中文手册
2021/03/18 PHP
2014年五四青年节演讲稿范文
2014/04/22 职场文书
煤矿安全生产月活动总结
2014/07/05 职场文书
社会治安综合治理责任书
2015/01/29 职场文书
2016年中秋节慰问信
2015/12/01 职场文书
Python绘制分类图的方法
2021/04/20 Python
Python进阶学习之带你探寻Python类的鼻祖-元类
2021/05/08 Python
Eclipse+Java+Swing+Mysql实现电影购票系统(详细代码)
2022/01/18 Java/Android
疑《守望先锋2》A测截图泄露 或将推出新模式、新界面
2022/04/03 其他游戏
Centos系统通过Docker安装并搭建MongoDB数据库
2022/04/12 MongoDB