资讯专栏INFORMATION COLUMN

Yii 的修行之路 - Console 控制台命令

everfly / 2613人阅读

摘要:它由一个或多个类组成,它们在控制台环境下通常被称为命令。控制台入口脚本通常被称为,位于应用程序的根目录。选项通过覆盖在中的方法,你可以指定可用于控制台命令选项。参数将传递给请求的子命令对应的操作方法。通常,执行成功的命令会返回。

简述

控制台应用程序的结构非常类似于 Yii 的一个 Web 应用程序,主要用于终端服务器执行。

控制台命令

控制台应用程序的结构非常类似于 Yii 的一个 Web 应用程序。

它由一个或多个 yiiconsoleController 类组成,它们在控制台环境下通常被称为“命令”。每个控制器还可以有一个或多个动作,就像 web 控制器。

两个项目模板(基础模版和高级模版)都有自己的控制台应用程序。你可以通过运行 yii 脚本,在位于仓库的基本目录中运行它。

当你不带任何参数来运行它时,会给你一些可用的命令列表:

正如你在截图中看到,Yii 中已经定义了一组默认情况下可用的命令:

yiiconsolecontrollersAssetController - 允许合并和压缩你的 JavaScript 和 CSS 文件。

yiiconsolecontrollersCacheController - 清除应用程序缓存。

yiiconsolecontrollersFixtureController - 管理用于单元测试 fixture 的加载和卸载。

yiiconsolecontrollersHelpController - 提供有关控制台命令的帮助信息,这是默认的命令并会打印上面截图所示的输出。

yiiconsolecontrollersMessageController - 从源文件提取翻译信息。

yiiconsolecontrollersMigrateController - 管理应用程序数据库迁移。

用法
你可以使用以下语法来执行控制台控制器操作:

yii  [--option1=value1 --option2=value2 ... argument1 argument2 ...]

以上, 指的是控制器动作的路由。选项将填充类属性,参数是动作方法的参数。

例如,将

yiiconsolecontrollersMigrateController::actionUp()

限制 5 个数据库迁移并将

yiiconsolecontrollersMigrateController::$migrationTable

设置为 migrations 应该这样调用:

yii migrate/up 5 --migrationTable=migrations

注意: 当在控制台使用 时, 不要忘记像 "" 一样用引号来引起来,为了防止在 shell 中执行命令时被当成当前目录下的所有文件名。

入口脚本

控制台应用程序的入口脚本相当于用于 Web 应用程序的 index.php 入口文件。 控制台入口脚本通常被称为 yii,位于应用程序的根目录。它包含了类似下面的代码:

#!/usr/bin/env phprun();
exit($exitCode);

该脚本将被创建为你应用程序中的一部分;你可以根据你的需求来修改它。如果你不需要记录错误信息或者希望提高整体性能,YII_DEBUG 常数应定义为 false。

在基本的和高级的两个应用程序模板中,控制台应用程序的入口脚本在默认情况下会启用调试模式,以提供给开发者更好的环境。

配置

在上面的代码中可以看到,控制台应用程序使用它自己的配置文件,名为 console.php 。在该文件里你可以给控制台配置各种 应用组件 和属性。

如果你的 web 应用程序和控制台应用程序共享大量的配置参数和值,你可以考虑把这些值放在一个多带带的文件中,该文件中包括( web 和控制台)应用程序配置。 你可以在“高级”项目模板中看到一个例子。

提示:有时,你可能需要使用一个与在入口脚本中指定的应用程序配置不同的控制台命令。例如,你可能想使用 yii migrate命令来升级你的测试数据库,它被配置在每个测试套件。

要动态地更改配置,只需指定一个自定义应用程序的配置文件,通过appconfig选项来执行命令:

yii  --appconfig=path/to/config.php ...
控制台的控制器和行为

一个控制台命令继承自 yiiconsoleController 控制器类。 在控制器类中,定义一个或多个与控制器的子命令相对应的动作。在每一个动作中,编写你的代码实现特定的子命令的适当的任务。

当你运行一个命令时,你需要指定一个控制器的路由。例如,路由 migrate/create 调用子命令对应的yiiconsolecontrollersMigrateController::actionCreate() 动作方法。

如果在执行过程中提供的路由不包含路由 ID ,将执行默认操作(如 web 控制器)。

选项

通过覆盖在 options() 中的方法,你可以指定可用于控制台命令(controller/actionID)选项。这个方法应该返回控制器类的公共属性的列表。

当运行一个命令,你可以指定使用语法 --OptionName=OptionValue 选项的值。 这将分配OptionValue 到控制器类的 OptionName 属性。

参数

除了选项,命令还可以接收参数。参数将传递给请求的子命令对应的操作方法。第一个参数对应第一个参数,第二个参数对应第二个参数,依次类推。

命令被调用时,如果没有足够的参数,如果有定义默认值的情况下,则相应的参数将采取默认声明的值;如果没有设置默认值,并且在运行时没有提供任何值,该命令将以一个错误退出。

你可以使用 array 类型提示来指示一个参数应该被视为一个数组。该数组通过拆分输入字符串的逗号来生成。

下面的示例演示如何声明参数:

class ExampleController extends yiiconsoleController{
    // 命令 "yii example/create test" 会调用 "actionCreate("test")"
    public function actionCreate($name) { ... }

    // 命令 "yii example/index city" 会调用 "actionIndex("city", "name")"
    // 命令 "yii example/index city id" 会调用 "actionIndex("city", "id")"
    public function actionIndex($category, $order = "name") { ... }

    // 命令 "yii example/add test" 会调用 "actionAdd(["test"])"
    // 命令 "yii example/add test1,test2" 会调用 "actionAdd(["test1", "test2"])"
    public function actionAdd(array $name) { ... }
}
退出代码

使用退出代码是控制台应用程序开发的最佳做法。

通常,执行成功的命令会返回 0。如果命令返回一个非零数字,会认为出现错误。

该返回的数字作为出错代码,用以了解错误的详细信息。

例如 1 可能代表一个未知的错误,所有的代码都将保留在特定的情况下:输入错误,丢失的文件等等。

要让控制台命令返回一个退出代码,只需在控制器操作方法中返回一个整数:

public function actionIndex(){
    if (/* some problem */) {
        echo "A problem occured!
";
        return 1;
    }
    // do something
    return 0;
}

你可以使用一些预定义的常数:

Controller::EXIT_CODE_NORMAL 值为 0;

Controller::EXIT_CODE_ERROR 值为 1.

为控制器定义有意义的常量,以防有更多的错误代码类型,这会是一个很好的实践。

格式和颜色

Yii 支持格式化输出,如果终端运行命令不支持的话则会自动退化为非格式化输出。

要输出格式的字符串很简单。以下展示了如何输出一些加粗的文字:

$this->stdout("Hello?
", Console::BOLD);

如果你需要建立字符串动态结合的多种样式,最好使用 ansiFormat :

$name = $this->ansiFormat("Alex", Console::FG_YELLOW);
echo "Hello, my name is $name.";

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/21611.html

相关文章

  • Yii 修行之路 - Migration 数据迁移

    摘要:把所有的增量数据库迁移提交到生产环境数据库当中。如果其中任意一个迁移提交失败了,那么这条命令将会退出并停止剩下的那些还未执行的迁移。执行这条命令期间不会有任何的迁移会被提交或还原。 简述 数据迁移就是数据库表在团队建的迁移操作,达到团队相互间的信息同步,数据统一。 数据库迁移 一般步骤: 1、在 yii2 的 migrate 中,通常用来对数据库数据表进行修改操作,主要对结构和小部分数...

    noONE 评论0 收藏0
  • Yii 修行之路 - Gii 代码生成器

    摘要:简述是一个强大的代码生成器,主要用于后台代码生成。下面列出由生成的文件,以便你研习功能和实现,或修改它们控制器模型和视图补充被设计成高度可定制和可扩展的代码生成工具。使用生成代码是一个基于界面的代码生成工具。 简述 Gii 是一个强大的代码生成器,主要用于后台代码生成。 开始 Gii Gii 是 Yii 中的一个模块。可以通过配置应用的 yiibaseApplication::modu...

    fuchenxuan 评论0 收藏0
  • Yii 修行之路 - Errors(错误处理) & Logging(日志记录)

    摘要:简述这里简单归纳总结关于的错误处理和日志记录的操作。错误处理器会正确地设置响应的状态码并使用合适的错误视图页面来显示错误信息。记录一个警告消息用来指示一些已经发生的意外。的义务是正确处理日志消息。相应的消息通过被记录。 简述 这里简单归纳总结关于Yii的错误处理和日志记录的操作。 错误处理(Errors) Yii 内置了一个yiiwebErrorHandler错误处理器,它使错误处理更...

    _ang 评论0 收藏0
  • Yii 修行之路 - View 视图渲染

    摘要:简述模块是中的架构的板块,主要负责数据的展示,渲染模板文件,展示数据内容。此外在一个视图中还可以引入多个视图文件,也是通过方法实现。布局文件的数据默认以显示,也可以用数据块的形式渲染到视图上。必须要确认生成一次,才会正式生成新首页。 简述 View模块是Yii中的MVC架构的V板块,主要负责数据的展示,渲染模板文件,展示数据内容。 基本概念 MVC在Yii里面有一个Views文件夹,里...

    Mr_houzi 评论0 收藏0
  • Yii修行之路 - Security 安全

    摘要:认证事件类在登录和注销流程引发一些事件。成功注销后引发。提供两种授权方法存取控制过滤器和基于角色的存取控制。允许已认证用户执行操作。指定一个回调函数用于判定该规则是否满足条件。 简述 在程序开发过程中,往往都不能忽视安全问题,无论你的框架有多么完美,都会有破绽,所以完善自己的系统,从程序开发的安全角度去思考问题,把一切潜在的危机扼杀在摇篮中。 认证(Authentication) 认证...

    AaronYuan 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<