コマンドラインスクリプトを実行するLaravelについて話しましょう

WBOY
リリース: 2022-04-06 20:16:14
転載
2967 人が閲覧しました

この記事では、Laravel に関する関連知識を提供します。主に、コマンド ライン スクリプトの実行に関連する問題を紹介します。Laravel には、Console ディレクトリという別のディレクトリがあります。スクリプト ファイルの保存に使用されます。 。一緒に見てみましょう。皆さんのお役に立てれば幸いです。

コマンドラインスクリプトを実行するLaravelについて話しましょう

推奨される学習: 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について話しましょう

では、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 サイトの他の関連記事を参照してください。

関連ラベル:
ソース:juejin.im
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!