codefine 2019-01-19 10:53:32 8921次浏览 0条评论 4 3 0

整理 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"
        }
...

觉得很赞
    没有找到数据。
您需要登录后才可以评论。登录 | 立即注册