忽然之间的博客

Thoughts, stories and ideas.

Yii命令行使用总结

整理Yii Console 一些用法和问题

  • Console Applicaton 配置和运行
  • 如何实现接收原始参数?
  • 如何实现终端等待输入,输入确认?

在框架根目录,有文件名称为 yii,可以在命令行模式运行。

#!/usr/bin/env php
<?php
/**
 * Yii console bootstrap file.
 *
 * @link http://www.yiiframework.com/
 * @copyright Copyright (c) 2008 Yii Software LLC
 * @license http://www.yiiframework.com/license/
 */

defined('YII_DEBUG') or define('YII_DEBUG', true);
defined('YII_ENV') or define('YII_ENV', 'dev');

require(__DIR__ . '/vendor/autoload.php');
require(__DIR__ . '/vendor/yiisoft/yii2/Yii.php');

// 配置文件位置
$config = require(__DIR__ . '/config/console.php');
//console application实例
$application = new yii\console\Application($config);
$exitCode = $application->run();
exit($exitCode);

整理等待输入,输入确认用法。yii\helpers\BaseConsole是终端的帮助类,处理命令行输入,输出。


namespace app\commands; use Yii; class HelloController extends Controller { /** * This command echoes what you have entered as the message. * @param string $message the message to be echoed. */ public function actionIndex($message = 'hello world') { //Yii方式接收参数 echo $message . "\n"; try { var_dump($argv); } catch (\Exception $e) { echo $e->getMessage(); //Undefined variable: argv } //接收原始命令行参数 global $argv; var_dump($argv); //输入提示符 $name = \yii\helpers\BaseConsole::input("输入姓名: "); $age = \yii\helpers\BaseConsole::prompt("输入年龄: ", ['default' => 20]); if(!$this->confirm("确定输入正确吗?")) { exit("退出\n"); } echo "你输入的姓名是:$name\n"; echo "你输入的年龄是:$age\n"; } }

终端输出

# 提示输入,确认输入
php yii hello 
输入姓名: 小明
输入年龄:  [20] 10
确定输入正确吗? (yes|no) [no]:yes
你输入的姓名是:小明
你输入的年龄是:10

# $argv
php yii hello msg

        array(2) {
          [0]=>
          string(3) "yii"
          [1]=>
          string(5) "hello"
          [2]=>
          string(3) "msg"
        }
...