ホームページ PHPフレームワーク Laravel Laravel 5.1 フレームワークでカスタム Artisan コンソール コマンドを作成する方法

Laravel 5.1 フレームワークでカスタム Artisan コンソール コマンドを作成する方法

Jul 31, 2018 am 11:39 AM

laravel 初心者にとっては、laravel のカスタム Artisan コンソール コマンドについてあまり知らないかもしれません。次の記事では、laravel フレームワークでカスタム Artisan コンソール コマンドを作成する例を紹介します。

1. はじめに

Laravel は、非ブラウザーのビジネス ロジックを処理するための Artisan を介した強力なコンソール コマンドを提供します。 Laravel ですべての Artisan コマンドを表示するには、プロジェクトのルート ディレクトリで実行できます:

php artisan list
ログイン後にコピー

対応する出力は次のとおりです (部分的なスクリーンショット):

Laravel 5.1 フレームワークでカスタム Artisan コンソール コマンドを作成する方法

名前の一部は、すでによく知られています。マイグレーション make:migration と Migrate の実行 (モデルの作成、make:model、コントローラーの作成など) make:controller

特定のコマンドの具体的な使用法を確認したい場合、たとえば Artisan コマンド make:console の具体的な使用法を確認したい場合は、次のコマンドを使用できます:

php artisan help make:console
ログイン後にコピー

対応する出力は次のとおりです。 :

Laravel 5.1 フレームワークでカスタム Artisan コンソール コマンドを作成する方法

2. コマンドの作成

Artisan では、豊富なコンソール コマンドのセットを提供するだけでなく、make:console コマンドを使用して独自のコンソール コマンドを作成することもできます。上記では、help コマンドを使用して make:console の使用法を確認しました。このパスをたどって調べてみましょう。コマンドを作成して実行すると、必要なさまざまな結果が得られます。

まず、次のように Artisan コマンドを使用して、Hello LaravelAcademy を出力する最も単純なコマンドを作成します。

php artisan make:console HelloLaravelAcademy --command=laravel:academy
ログイン後にコピー

ここで、HelloLaravelAcademy はコマンド名、laravel:academy は、make:console と同様に、コンソールによって実行されるコマンドです。

実行が完了すると、HelloLaravelAcademy.php ファイルが app/Console/Commands ディレクトリに生成されます:

<?php
namespace App\Console\Commands;
use Illuminate\Console\Command;
class HelloLaravelAcademy extends Command
{
    /**
     * The name and signature of the console command.
     *
     * @var string
     */
    protected $signature = &#39;laravel:academy&#39;;
    /**
     * The console command description.
     *
     * @var string
     */
    protected $description = &#39;Command description.&#39;;
    /**
     * Create a new command instance.
     *
     * @return void
     */
    public function __construct()
    {
        parent::__construct();
    }
    /**
     * Execute the console command.
     *
     * @return mixed
     */
    public function handle()
    {
        //
    }
}
ログイン後にコピー

ここで、$signature はコンソールで実行されるコマンドの名前、$description はコマンドの説明、 handle メソッドは、コマンドが実行されるときに呼び出すメソッドです。

次に、次のようにハンドルメソッドを記述します:

public function handle()
{
    echo "Hello LaravelAcademy\n";
}
ログイン後にコピー

さて、最も単純なコマンドが記述されました。それを実行してコンソールに「Hello Laravel Academy」と出力する方法は次のとおりです。

3. コマンドを実行します

コマンドを実行する前に、AppConsoleKernel の $commands 属性に登録する必要があります:

protected $commands = [
     ...  //其他命令类
     \App\Console\Commands\HelloLaravelAcademy::class
];
ログイン後にコピー

次に、コンソールで次の Artisan コマンドを実行できます:

php artisan laravel:academy
ログイン後にコピー
ログイン後にコピー

印刷してください:

Hello LaravelAcademy
ログイン後にコピー

とても簡単ですね?

4. より多様な入力と出力

もちろん、上記は入力がなく、出力がハードコーディングされた最も単純なケースです。実際の環境では、より複雑な要件とより多様な入力と出力が存在します。以下で 1 つずつ説明します。

入力の定義

前述したように、$signature 属性を変更することで入力パラメータとオプションを定義できます。たとえば、ここでは上記の Hello の後の文字列を入力パラメータによって制御できるように調整します。以下のように:

protected $signature = &#39;laravel:academy {name}&#39;;
ログイン後にコピー

この定義は、name が必須パラメータであることを意味し、もちろん、より多くのカスタム パラメータ入力もサポートします:

{name?} //可选参数
{name=LaravelAcademy} //默认name值为LaravelAcademy
ログイン後にコピー

プログラムの堅牢性を強化するために、デフォルト値を持つように name を変更します:

protected $signature = &#39;laravel:academy {name=LaravelAcademy}&#39;;
ログイン後にコピー

場合によっては、コマンドを実行するときに、句読点を表示するかどうかなどのオプションを渡します (味気ないように思えますが、これはテストのためだけです)。その後、$signature 属性を次のように変更できます。コマンドを呼び出すときに --mark を渡すと、その値は true になります。それ以外の場合は、オプションの値が入力時にユーザーによって設定される場合、$signature は次のように定義できます:

protected $signature = &#39;laravel:academy {name=LaravelAcademy} {--mark}&#39;;
ログイン後にコピー

このように、ユーザーはもちろん、オプションを渡すときに = を通じてオプションに値を割り当てることができます。オプションのデフォルト値を指定することもできます:

protected $signature = &#39;laravel:academy {name=LaravelAcademy} {--mark=}&#39;;
ログイン後にコピー

入力を定義した後。入力パラメータとオプション、それらに対応する値を取得するにはどうすればよいでしょうか? Laravel は対応するメソッドを提供します。

IlluminateConsoleCommandの引数メソッドを通じてパラメータ値を取得できます:

protected $signature = &#39;laravel:academy {name=LaravelAcademy} {--mark=!}&#39;;
ログイン後にコピー

パラメータなしで引数メソッドが呼び出された場合、すべてのパラメータ値の配列が返されます。

IlluminateConsoleCommand の option メソッドを通じてオプション値を取得できます:

$name = $this->argument(&#39;name&#39;);
ログイン後にコピー

同様に、パラメーターなしで option メソッドを呼び出すと、すべてのオプション値の配列が返されます。

このようにして、HelloLaravelAcademy のハンドル メソッドを次のように変更できます:

$mark = $this->option(&#39;mark&#39;);
ログイン後にコピー

このようにして、コンソールに次の Artisan コマンドを入力します:

public function handle()
{
    $name = $this->argument(&#39;name&#39;);
    $mark = $this->option(&#39;mark&#39;);
    $string = 'Hello '.$name;
    if($mark)
        $string .= $mark;
    echo $string."\n";
}
ログイン後にコピー

対応する出力は次のとおりです:

php artisan laravel:academy
ログイン後にコピー
ログイン後にコピー

次に、次の Artisan を実行します。コマンド:

Hello LaravelAcademy!
ログイン後にコピー

対応する出力は次のとおりです:

php artisan laravel:academy Laravel --mark=?
ログイン後にコピー

入力プロンプト

最初にハンドルメソッドを次のように変更して、ユーザーが入力パラメータを取得できるようにすることもできます。ターミナルの laravel:academy の対話型ページは次のとおりです:

パスワードなどの機密情報を入力する場合は、ask メソッドの代わりに Secret を使用できます。

ユーザーの希望に応じて続行または中止を選択する場合もあります:

Hello Laravel?
ログイン後にコピー

対応する出力は次のとおりです: Laravel 5.1 フレームワークでカスタム Artisan コンソール コマンドを作成する方法

Laravel 5.1 フレームワークでカスタム Artisan コンソール コマンドを作成する方法

除了让用户手动输入外,还可以使用anticipate方法实现自动完成功能:

public function handle()
{
    $name = $this->anticipate(&#39;What is your name?&#39;, [&#39;Laravel&#39;, &#39;Academy&#39;]);
    $this->info($name);
}
ログイン後にコピー

当然还可以使用choice方法为用户提供选择避免手动输入,用户只需选择对应索引即可:

public function handle()
{
    $name = $this->choice(&#39;What is your name?&#39;, [&#39;Laravel&#39;, &#39;Academy&#39;]);
    $this->info($name);
}
ログイン後にコピー

对应交互页面如下:

Laravel 5.1 フレームワークでカスタム Artisan コンソール コマンドを作成する方法

编写输出

关于输出字符串,上面我们简单使用了echo语句,其实Laravel提供了更为强大和多样化的方法:

public function handle()
{
    $this->info("Successful!");
    $this->error("Something Error!");
    $this->question("What do you want to do?");
    $this->comment("Just Comment it!");
}
ログイン後にコピー

执行php artisan laravel:academy对应输出如下:

Laravel 5.1 フレームワークでカスタム Artisan コンソール コマンドを作成する方法

表格

Artisan甚至可以输出表格:

public function handle()
{
    $headers = [&#39;Name&#39;, &#39;Email&#39;];
    $users = \App\User::all([&#39;name&#39;, &#39;email&#39;])->toArray();
    $this->table($headers, $users);
}
ログイン後にコピー

执行php artisan laravel:academy对应输出为:

Laravel 5.1 フレームワークでカスタム Artisan コンソール コマンドを作成する方法

进度条

当然对于复杂耗时的命令,进度条是必不可少的,

public function handle()
{
    $this->output->progressStart(10);
    for ($i = 0; $i < 10; $i++) {
        sleep(1);
        $this->output->progressAdvance();
    }
    $this->output->progressFinish();
}
ログイン後にコピー

执行php artisan laravel:academy对应输出为:

Laravel 5.1 フレームワークでカスタム Artisan コンソール コマンドを作成する方法

5、从CLI之外调用Artisan

除了在控制台执行Artisan命令之外,还可以通过代码在别处调用Artisan命令,比如其它Artisan命令、控制器、路由或其他。

路由

在路由闭包中我们可以通过Artisan门面的call方法来调用本节创建的命令:

//在路由中调用Artisan命令
Route::get(&#39;testArtisan&#39;,function(){
    $exitCode = Artisan::call(&#39;laravel:academy&#39;, [
        &#39;name&#39; => &#39;Laravel学院&#39;, &#39;--mark&#39; => &#39;!&#39;
    ]);
});
ログイン後にコピー

其它Artisan命令

在一个Artisan命令中也可以调用另一个Artisan命令,还是通过call方法:

public function handle()
{
    $this->call(&#39;inspire&#39;);
}
ログイン後にコピー

如果想要调用一个Artisan命令并阻止其所有输出,可以使用callSilent方法:

public function handle()
{
    $this->callSilent(&#39;inspire&#39;);
}
ログイン後にコピー

除此之外,关于Artisan命令你还应该知道的是我们可以在创建的命令类的控制器或方法中注入任何依赖。这就意味着我们可以在命令类中使用注册到服务容器的所有类。

相关推荐:

laravel框架的启动过程分析

Laravel框架内置的Broadcast功能如何实现与客户端实时通信

以上がLaravel 5.1 フレームワークでカスタム Artisan コンソール コマンドを作成する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

どちらが良いのか、DjangoとLaravel? どちらが良いのか、DjangoとLaravel? Mar 28, 2025 am 10:41 AM

DjangoとLaravelはどちらもフルスタックのフレームワークです。 DjangoはPython開発者や複雑なビジネスロジックに適していますが、LaravelはPHP開発者とエレガントな構文に適しています。 1.DjangoはPythonに基づいており、迅速な発展と高い並行性に適した「バッテリーコンプリート」哲学に従います。 2. LaravelはPHPに基づいており、開発者エクスペリエンスを強調しており、小規模から中規模のプロジェクトに適しています。

LaravelとThe BackEnd:Webアプリケーションロジックの電源 LaravelとThe BackEnd:Webアプリケーションロジックの電源 Apr 11, 2025 am 11:29 AM

Laravelはバックエンドロジックでどのように役割を果たしますか?ルーティングシステム、Eloquentorm、認証と承認、イベントとリスナー、パフォーマンスの最適化を通じてバックエンド開発を簡素化および強化します。 1.ルーティングシステムにより、URL構造の定義とリクエスト処理ロジックが可能になります。 2.Eloquentormは、データベースの相互作用を簡素化します。 3.認証および承認システムは、ユーザー管理に便利です。 4.イベントとリスナーは、ゆるく結合したコード構造を実装します。 5.パフォーマンスの最適化により、キャッシュとキューイングを通じてアプリケーションの効率が向上します。

Laravelは紹介例 Laravelは紹介例 Apr 18, 2025 pm 12:45 PM

Laravelは、Webアプリケーションを簡単に構築するためのPHPフレームワークです。次のような強力な機能を提供します。インストール:Laravel CLIを作曲家にグローバルにインストールし、プロジェクトディレクトリにアプリケーションを作成します。ルーティング:ルート/web.phpのURLとハンドラーの関係を定義します。ビュー:リソース/ビューでビューを作成して、アプリケーションのインターフェイスをレンダリングします。データベース統合:MySQLなどのデータベースとのすぐ外側の統合を提供し、移行を使用してテーブルを作成および変更します。モデルとコントローラー:モデルはデータベースエンティティを表し、コントローラーはHTTP要求を処理します。

どちらがより良いPHPですか、それともLaravelですか? どちらがより良いPHPですか、それともLaravelですか? Mar 27, 2025 pm 05:31 PM

LaravelはPHPベースのフレームワークであるため、PHPとLaravelは直接匹敵するものではありません。 1.PHPは、シンプルで直接的であるため、小規模プロジェクトや迅速なプロトタイピングに適しています。 2。LARAVELは、豊富な機能とツールを提供するため、大規模なプロジェクトや効率的な開発に適していますが、急な学習曲線があり、純粋なPHPほど良くない場合があります。

Laravelはフロントエンドですか、それともバックエンドですか? Laravelはフロントエンドですか、それともバックエンドですか? Mar 27, 2025 pm 05:31 PM

laravelisabackendframeworkbuiltonphp、designforwebapplicationdevelopment.itfocusonserver-sidelogic、databasemanagement、およびapplicationStructure、およびbueithedendtechnologiesvue.jsorreactforfull-stackdevelymentと統合されていること。

Laravelユーザーログイン機能 Laravelユーザーログイン機能 Apr 18, 2025 pm 12:48 PM

Laravelは、ユーザーモデル(Eloquentモデル)の定義、ログインフォームの作成(ブレードテンプレートエンジン)、ログインコントローラーの作成(認証\ログインコントローラーの継承)、ログイン要求の検証(Auth ::試行)の検証など、ユーザーログイン機能を実装するための包括的なAuthフレームワークを提供します。ヘッダー。さらに、AUTHフレームワークは、パスワードのリセット、電子メールの登録と検証などの機能も提供します。詳細については、Laravelのドキュメントを参照してください:https://laravel.com/doc

Laravelを学ぶ方法Laravelを無料で学ぶ方法 Laravelを学ぶ方法Laravelを無料で学ぶ方法 Apr 18, 2025 pm 12:51 PM

Laravelフレームワークを学びたいが、資源や経済的圧力に苦しんでいないのですか?この記事では、Laravelの無料学習を提供し、オンラインプラットフォーム、ドキュメント、コミュニティフォーラムなどのリソースを使用して、PHP開発の旅から習得するための堅実な基盤を築く方法を教えてくれます。

Laravelフレームワークのスキル共有 Laravelフレームワークのスキル共有 Apr 18, 2025 pm 01:12 PM

継続的な技術の進歩のこの時代において、現代のプログラマーにとって高度なフレームワークをマスターすることが重要です。この記事では、Laravelフレームワークであまり知られていないテクニックを共有することで、開発スキルを向上させるのに役立ちます。エレガントな構文と幅広い機能で知られるこの記事では、その強力な機能を掘り下げ、効率的で保守可能なWebアプリケーションを作成するための実用的なヒントとコツを提供します。

See all articles