ホームページ > 記事 > PHPフレームワーク > コマンドラインスクリプトを実行するLaravelについて話しましょう
この記事では、Laravel に関する関連知識を提供します。主に、コマンド ライン スクリプトの実行に関連する問題を紹介します。Laravel には、Console ディレクトリという別のディレクトリがあります。スクリプト ファイルの保存に使用されます。 。一緒に見てみましょう。皆さんのお役に立てれば幸いです。
推奨される学習: Laravel の入門
Laravel には別のディレクトリがあり、それが Console ディレクトリであることがわかりました。 . スクリプト ファイルを保存するために使用されます。このスクリプト ファイルは通常、php コマンドを通じて実行するコマンド ライン スクリプトを指します。このスクリプトには、多くのフレームワークでそのような機能があります。最新のアプリケーション開発では、データ統計、データ エクスポート、キュー処理、一部の自動バックエンド実行プログラムなどの時間のかかる機能を、このコマンド ライン スクリプトを使用して実行する必要があります。
現在のフレームワーク ディレクトリで、ルート ディレクトリにある php 職人を実行すると、コマンド ラインのヘルプ情報が表示されます。これは、既存のすべてのコマンド ラインのリストです。脚本。最初の記事では、これらのコマンドのうち 2 つについて説明しました。
# php artisan key:generate # php artisan serve
その機能の 1 つは、暗号化されたキャッシュなどに使用する必要がある一意のキーを生成することであり、もう 1 つは、それに付属する単純なサーバーを実行することです。スクリプト名から、スクリプトは : で区切ることができ、コロンの前に、cache:xxx 関連や make:xxx 関連などの大きなカテゴリがあることがわかります。キャッシュはキャッシュ情報の処理に関連し、メイクは必要なファイルの作成に関連します。たとえば、コントローラーを作成するには make:controller を使用し、データ モデルを作成するには make:model を使用します。
これらのデフォルトの組み込みスクリプトについては、関連する内容を学習するときに学習します。
スクリプトのカスタマイズは非常に簡単です。 make:command コマンドを使用してコマンド ライン スクリプトを生成できます。
# php artisan make:command test1 Console command created successfully.
この時点で、test1.php ファイルが app/Console/Commands ディレクトリに表示されます。このファイルを開くと、いくつかの変更を加える必要があります。
/** * The name and signature of the console command. * * @var string */ protected $signature = 'command:name'; /** * The console command description. * * @var string */ protected $description = 'Command description';
signature は現在のスクリプトの名前を設定するために使用され、description はスクリプトのコメント説明を定義するために使用されます。どこで使われているのでしょうか?実際、signature は、php 職人を通じてこのスクリプトを実行するときに使用する必要がある名前です。たとえば、ここで php 職人を直接実行すると、次の実行可能なコマンド ライン スクリプトが表示されることがわかります。
command command:name Command description
もちろん、このデフォルト名を使用するのは得策ではないため、これら 2 つのプロパティを変更できます。
/** * The name and signature of the console command. * * @var string */ protected $signature = 'ZyBlog:Test1'; /** * The console command description. * * @var string */ protected $description = '硬核测试1';
この時点で再度phpArtisanを実行すると、定義した情報が表示されます。
ZyBlog ZyBlog:Test1 硬核测试1
このスクリプトを実行するのは非常に簡単です。
# php artisan ZyBlog:Test1
もちろん、まだ何もしていないため、出力はありません。次に、受信パラメータと出力情報を組み合わせます。パラメーターを受け取るには、署名で受け取りたいパラメーターとオプションを定義する必要があります。 PHP でスクリプトのパラメーターとオプション情報を受け取る方法について以前説明した記事を覚えていますか? Laravel はこれらをすでにカプセル化しているため、受信や処理にこれらの関数を使用する必要はなく、直接使用するだけです。復習が必要な学生は、[PHP コマンド ライン パラメーターの取得方法] mp.weixin.qq.com/s/dFuGaM1JT… にアクセスして復習または学習できます。
protected $signature = 'ZyBlog:Test1 {a=1} {--b=*}'; /** * Execute the console command. * * @return int */ public function handle() { echo "欢迎进来测试!", PHP_EOL; print_r($this->arguments()); // Array // ( // [command] => ZyBlog:Test1 // [a] => 1 // ) print_r($this->options()); // Array // ( // [b] => Array // ( // [0] => 2 // ) // [help] => // [quiet] => // [verbose] => // [version] => // [ansi] => // [no-ansi] => // [no-interaction] => // [env] => // ) echo $this->argument('a'); // 1 print_r($this->option('b')); // Array // ( // [0] => 2 // ) return 0; }
handle() 関数では、現在のスクリプトが実行する必要がある関数コードを記述することができます。このうち、スクリプトのパラメータ情報はarguments()とargument()を通じて受け取ることができ、スクリプトのオプション情報はoptions()とoption()を通じて受け取ることができます。パラメータやオプションについては以前の記事でも説明しているので割愛しますが、すべて基本に基づいています。
パラメータとオプションについては、Laravel の基礎となる呼び出しは実際には symfony の Console コンポーネントです。symfony/console/Input/ArgvInput.php では、以下のコードに移動することがわかります。 。
public function __construct(array $argv = null, InputDefinition $definition = null) { $argv = $argv ?? $_SERVER['argv'] ?? []; // strip the application name array_shift($argv); $this->tokens = $argv; parent::__construct($definition); } // …………………… // …………………… protected function parse() { $parseOptions = true; $this->parsed = $this->tokens; while (null !== $token = array_shift($this->parsed)) { if ($parseOptions && '' == $token) { $this->parseArgument($token); } elseif ($parseOptions && '--' == $token) { $parseOptions = false; } elseif ($parseOptions && 0 === strpos($token, '--')) { $this->parseLongOption($token); } elseif ($parseOptions && '-' === $token[0] && '-' !== $token) { $this->parseShortOption($token); } else { $this->parseArgument($token); } } }
明らかに、symfony では argv はパラメーターとオプションを取得するためにも使用され、それらは入力変数に入れられて渡されます。この入力変数は非常に重要であり、後でリクエスト関連のコンテンツを学習するときにも触れます。その後、実行コードで、つまり Command の handle() メソッドで argument() または option() を使用して、この入力のデータが取得されます。これらはブレークポイントのデバッグから確認できます。
では、Laravel はどのように handle() 関数を実行するのでしょうか?まず、artisan ファイルを介して laravel/framework/src/Illuminate/Foundation/Console/Kernel.php ファイルを呼び出します。Kernel.php の handle() メソッドで、symfony/console/Application.php が呼び出され、次のように入力します。 laravel/framework /src/Illuminate/Console/Command.phpのexecute()メソッドを実行し、コールバックを通じてカスタマイズしたhandle()メソッドを呼び出します。
laravel/framework/src/Illuminate/Console/Command.php の下部では、symfony の下の console/command.php のメソッドが引き続き呼び出されることに注意してください。
呼び出しチェーン全体は非常に長いですが、Laravel が実際に Symfony に基づいたシェルであることがはっきりとわかります。これはコマンドラインだけではなく、Web リクエストの観点から見ると、Symfony は依然として最下位レベルで重要な役割を果たしています。
推奨学習: Laravel ビデオ チュートリアル
以上がコマンドラインスクリプトを実行するLaravelについて話しましょうの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。