PHPixieコンソールでのコンソールコマンド

画像 PHPixie Consoleは、コンソールコマンドを作成、ルーティング、および実行できる新しいコンポーネントです。 他のフレームワークライブラリと同様に、Symfonyの同様のライブラリのより単純な代替として、PHPixie自体がなくても簡単に使用できます。 まず、この記事は既にPHPixieを使用している人を対象としており、標準フレームワークコマンドの簡単な説明が含まれていますが、最後に、PHPixieコンソールを個別に起動する方法の例も示します。



既存のプロジェクトのアップグレード
すでにPHPixieプロジェクトがある場合、コンソールを機能させるには、いくつかの簡単な変更を加える必要があります。



  1. https://github.com/PHPixie/Project/blob/master/consoleをプロジェクトのルートにコピーします 。 Linuxを使用している場合は、このファイル(chmod + x console)に実行権限を付与します
  2. composer.json「phpixie / framework-bundle」を追加:「〜3.0」
  3. バンドル\ PHPixie \ FrameworkBundleをオンにして、 / * GeneratorPlaceholder * /を追加します。

    ここのように: https : //github.com/PHPixie/Project/blob/master/src/Project/Framework/Bundles.php


オプションで、更新されたプロジェクトスケルトンから標準のアーキテクチャとデモコマンドをコピーすることもできます。



  1. Console.php
  2. コンソール/ Greet.php
  3. Builderギャングクラスで、次のようにコンソールクラスを接続します: Builder.php


注意、 NamespacePlaceholderをプロジェクトのネームスペース(デフォルトではProject )に、 BundleNamePlaceholderをバンドルの名前(ほとんどの場合これはApp )に置き換えます。



その後、構造は新しいプロジェクトの構造と同じになります。



使用する



コンソールを起動して、使用可能なコマンドのリストを表示します。



cd your_project_directory/ ./console #  php ./console
      
      





結果は次のようになります。



 Available commands: app:greet Greet the user framework:installWebAssets Symlink or copy bundle web files to the projects web folder framework:generateBundle Generate a new bundle help Print command list and usage
      
      





helpコマンドは、詳細情報と使用可能なオプションのリストを表示します。



 ./console help framework:installWebAssets framework:installWebAssets [ --copy ] Symlink or copy bundle web files to the projects web folder Options: copy Whether to copy web directories instead of symlinking them
      
      





標準チーム





独自のコマンドの追加



プロジェクトにgreetコマンドという簡単なアプリを追加しました。 コマンドの操作は、 \ Project \ App \ Consoleクラスを使用してHTTPプロセッサを追加するのとまったく同じです。 commandNames()メソッドによって返された配列にコマンド名を追加し、 build <command_name> Commandメソッドを追加します。



コマンドコンストラクターでは、パラメーターと引数の説明とリストを指定できます。



 namespace Project\App\Console; class Greet extends \PHPixie\Console\Command\Implementation { public function __construct($config) { //  $config->description('Greet the user'); //   'message' $config->argument('message') ->description("Message to display"); parent::__construct($config); } /** *      . * $argumentData  $optionData    *  HTTP $request->query()  $request->data() */ public function run($argumentData, $optionData) { $message = $argumentData->get('message', "Have fun coding!"); $this->writeLine($message); } }
      
      





引数とオプション



次のコマンドを追加するとします。



 sqldump --user=root --skip-missing -f myDatabase users items
      
      





ここで、 myDatabaseはデータベース名前であり、その後にバックアップするテーブルのリストが続きます。 これらは私たちのチームの議論です。 そして、 userskip-missing 、およびfオプション。 指定する順序は引数では重要ですが、オプションでは重要ではないことに注意してください。 また、1文字の短いオプションでは、2文字ではなく1文字を使用します。



コードでは、次のようになります。



 $config->option('user') //  ->required() // ,      'help' ->description("User to connect to the database with"); $config->option('skip-missing') ->description("Don't throw an error if the tables are missing") //   . //-   , //    'true'   . ->flag(); $config->option('f') ->flag() ->description("Force database dump");
      
      





引数を説明するときは、チームに存在する順序でそれらを尋ねる必要があることを覚えておく必要があります。 私たちの場合、 テーブルの前のアイデアのデータベース引数:



 $config->argument('database') ->required() ->description("Which database to dump the tables from"); $config->argument('tables') ->description("Tables to dump") //    //        , //        ->arrayOf();
      
      





ヘルプを実行すると、次の結果が得られます。



 ./console help app:sqldump app:sqldump --user=VALUE [ -f ] [ --skip-missing ] DATABASE [ TABLES... ] Options: user User to connect to the database with f Force database dump skip-missing Dont throw an error if the tables are missing Arguments: DATABASE Which database to dump the tables from TABLES Tables to dump
      
      





コマンドが起動されると、 run()メソッドにオプションと引数が渡され、そこからHTTPプロセッサーと同じ方法でそれらを取得できます。



 public function run($argumentData, $optionData) { $database = $argumentData->get('database'); //     $user = $optionData->get('user', 'phpixie'); }
      
      





入出力



コンソールに出力する最も簡単な方法は、単にテキストを返すことです。 ただし、プロセスが長時間機能する必要があり、中間結果を出力する必要がある場合は、追加の方法を使用できます。



 public function run($argumentData, $optionData) { //   $this->write("Hello "); //      $this->writeLine("World"); //      $str = $this->readLine(); //   CommandException       //     -   (    Bash). throw new \PHPixie\Console\Exception\CommandException("Something bad happened"); }
      
      





さらに、CLIコンテキストにアクセスして、すでに操作することができます。



 public function run($argumentData, $optionData) { $context = $this->cliContext(); $inputStream = $cliContext->inputStream(); $outputStream = $cliContext->outputStream(); $errorStream = $cliContext->errorStream(); $outputStream->write("Hello"); $errorStream->writeLine("Something bad happened"); $context->setExitCode(1); //   
      
      





ステータスコードは、外部からのコマンド(Bashなど)が正常に実行されたかどうかを確認するときに役立ちます。



 if ./console app:somecommand ; then echo "Command succeeded" else echo "Command failed" fi
      
      





最初から書いたように、コンポーネントはフレームワークなしで簡単に使用できます。



 class YourCommandRegistry extends \PHPixie\Console\Registry\Provider\Implementation { public function commandNames() { return ['greet']; } public function buildGreetCommand($config) { return new Greet($config); } } $slice = new \PHPixie\Slice(); $cli = new \PHPixie\CLI(); $registry = new YourCommandRegistry(); $console = new \PHPixie\Console($slice, $cli, $registry); $console->runCommand();
      
      





したがって、コンソール機能を任意のプロジェクトに追加できます。すべての依存関係は最小限で、非常に直感的です。



All Articles