ホームページ >バックエンド開発 >PHPチュートリアル >Yii Framework 公式ガイド シリーズ 50 - 特別トピック: コンソールアプリケーション

Yii Framework 公式ガイド シリーズ 50 - 特別トピック: コンソールアプリケーション

黄舟
黄舟オリジナル
2017-02-16 09:53:291494ブラウズ



コンソール アプリケーションは主に、コード生成、検索インデックスのコンパイル、電子メール送信など、オンライン Web アプリケーションに必要なオフライン操作を実装するために使用されます。 Yii フレームワークは、オブジェクト指向で記述するためのコンソール アプリケーションを提供します。コンソール アプリケーションがオンライン Web アプリケーションで使用されるリソース (データベース接続情報など) にアクセスできるようにします。

1. 概要

Yii はコマンド ラインですべてのコンソール タスクを実行でき、コンソール コマンドは継承クラスです。 Cコンソールコマンド。

yiic Webapp ツールを使用して初期化された Yii アプリケーション スケルトンを作成すると、保護されたフォルダーに次の 2 つのファイルが表示されます:

  • yiic: これは Linux/Unix スクリプトで実行される実行可能ファイルです。

  • yiic.bat: これは、Windows 上で実行される実行可能なバッチ スクリプトです。

コンソール ウィンドウで、次のコマンドを入力できます:

cd protected
yiic help

これにより、一連のコンソール コマンドが表示されます。デフォルトでは、これらの有効なコマンドには、Yii フレームワークによって提供されるもの (システムコマンド) と、スタンドアロンアプリケーション用に開発者自身が作成したもの (ユーザーコマンド) が含まれます。

Yii Framework 公式ガイド シリーズ 50 - 特別トピック: コンソールアプリケーション

コマンドの使用方法を確認したい場合は、次のコマンドを使用できます:

yiic help <command-name></command-name>

コマンドを実行するには、次のコマンド形式を使用できます:

yiic <command-name> [parameters...]</command-name>

2. コマンドを作成します

コンソールコマンドが保存されます。クラス ファイルの形式 CConsoleApplication::command の形式のパス。デフォルトでは、protected/commands フォルダーを指します。

コンソール コマンド クラスは、CConsoleCommand の形式である必要があります。 XyzCommand。Xyz は名前の最初の文字が大文字のコマンドを表します。たとえば、サイトマップ コマンドはクラス名 SitemapCommand を使用する必要があります。コンソール コマンド名は大文字と小文字が区別されます。

ヒント: CConsoleApplication::command の一致を構成すると、さまざまな形式で名前が付けられ、さまざまなフォルダーに保存されたコマンド クラスを取得できます。

新しい For コマンドを作成するには、多くの場合、CConsoleCommand::run() をオーバーライドするか、1 つ以上のコマンド アクションを開発する必要があります。

コンソール コマンドを実行すると、コンソール アプリケーションによって CConsoleCommand::run() メソッドが呼び出されます。すべてのコンソール パラメーターも、次のメソッド フラグメントの形式でこのメソッドに渡されます:


public function run($args) { ... }

ここで、$args はコマンド ラインで指定された追加パラメーターを表します。

コンソールコマンドでは、Yii::app()を使用してコンソールアプリケーションインスタンスにアクセスできるだけでなく、データベース接続などのリソースにもアクセスできます(例:Yii::app()->db)。この使用法は、Web アプリケーションでの使用法と非常に似ていることがわかります。

情報: バージョン 1.1.1 以降、同じマシン上のすべての Yii アプリケーションで共有されるグローバル コマンドを作成することもできます。既存のフォルダーを指すように YII_CONSOLE_COMMANDS という名前の環境変数を定義すると、グローバル コマンド クラスでこのフォルダーに配置されます。

3. コンソールコマンドアクション (アクション)

注: このコンソールコマンドアクション機能は、バージョン 1.1.5 以降で有効です。

コンソール コマンドは、さまざまなコマンド ライン パラメーターを処理する必要があることがよくあります。コンソール コマンドには、さまざまなサブタスクを処理するためのサブコマンドも提供する必要があります。これらのタスクは、コンソール コマンド アクションを使用して簡素化できます。

コンソール コマンド アクションは、コンソール コマンド クラスのメソッドです。メソッド名は、actionXyz の形式にする必要があります。Xyz は、最初の文字を大文字にしたアクション名を表します。たとえば、actionIndex メソッドは、index という名前のアクションを定義します。

特定のアクションを実行するには、次のコマンド ライン形式を使用できます:

yiic <command-name> <action-name> --option1=value1 --option2=value2 ...</action-name></command-name>
追加のオプションと値のペアが名前付きパラメーターとしてアクション メソッドに渡されます。xyz 操作の値は $xyz になります。パラメーターは に渡されます。アクションメソッド。たとえば、次のコマンド クラスを定義すると:


class SitemapCommand extends CConsoleCommand
{
    public function actionIndex($type, $limit=5) { ... }
    public function actionInit() { ... }
}

次に、actionIndex('News', 5) を呼び出すと、次のコンソール コマンドの結果が得られます。が指定されている場合 (例: --type=News の代わりに --type)、対応する action パラメータ値は true であるとみなされます。

注:
はオプションのパラメーター形式 --type News、-t News をサポートしていません。

パラメーター値は配列にすることができます (配列タイプのヒントが必要です):


yiic sitemap index --type=News --limit=5

// $limit takes default value
yiic sitemap index --type=News

// $limit takes default value
// because 'index' is a default action, we can omit the action name
yiic sitemap --type=News

// the order of options does not matter
yiic sitemap index --limit=5 --type=News

コマンドライン引数で配列値を使用するには、同じオプションを繰り返すだけです:

public function actionIndex(array $types) { ... }
上記のコマンドは最終的に actionIndex(array('News', 'Article')) を呼び出します。

バージョン 1.1 以降。 6 から、Yii は匿名アクションパラメータとグローバルオプションの使用もサポートします。

匿名参数表示这些命令行参数不是以选项的形式呈现. 例如, 在命令 yiic sitemap index --limit=5 News中, 我们有一个值为News的匿名参数和命名参数 limit,其值为5。

为了使用匿名参数, 一个命令动作必须声明参数为 $args的形式. 例如,


public function actionIndex($limit=10, $args=array()) {...}

$args数组将会装入所有的匿名参数值.

全局选项代表那些命令行选项可以被一个命令中所有动作共享的选项. 例如, 在一个命令中提供了多个选项, 我们可能想要每一个动作识别一个名为verbose的动作. 当然我们可以在每一个动作方法中声明 $verbose 参数, 一个更好的方式是将其声明为这个命令类的公有成员变量, 将 verbose 转换为全局参数:


class SitemapCommand extends CConsoleCommand
{
    public $verbose=false;
    public function actionIndex($type) {...}
}

上面的代码允许我们执行一个带 verbose 选项的命令:

yiic sitemap index --verbose=1 --type=News

4. 退出代码

Note: 在控制台命令中退出代码的特性从版本 1.1.11起有效.

通过cronjob或者使用一个持续集成的服务器自动运行控制台命令的时候, 要么命令运行运行成功,要么命令运行失败. 这可以通过检查进程返回的退出代码来查看。

这些退出码是从0-254的整型值(this is the range in php world), 其中 0 表示退出成功其他的所有非0值表示出现了错误.

在一个动作方法或者控制台命令的 run() 方法中你可以在退出时返回整型值退出码 ,例如:


if (/* error */) {
    return 1; // exit with error code 1
}
// ... do something ...
return 0; // exit successfully

如果没有返回值, 应用将会退出返回 0.

5. 自定义控制台应用

默认情况下, 如果一个应用是使用yiic webapp工具创建的, 命令行应用的配置将会放在 protected/config/console.php文件中. 和一个Web应用配置文件一样, 这个文件是一个返回控制台应用实例的初始化配置值的数组的PHP脚本。所以CConsoleApplication的任何公有属性都可以在该文件中配置.

因为控制台命令经常被创建来服务于Web应用, 所以需要访问资源(如数据库连接)。我们可以在控制台配置文件中以如下方式来实现 :


return array(
    ......
    'components'=>array(
        'db'=>array(
            ......
        ),
    ),
);

正如我们所看到的那样, 配置的格式和我们在Web应用中的配置类似.这是因为CConsoleApplication和 CWebApplication 的基类相同。

 以上就是Yii框架官方指南系列50——专题:控制台应用的内容,更多相关内容请关注PHP中文网(www.php.cn)!


声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。