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

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 までご連絡ください。
Laravel(PHP)vs。Python:開発環境とエコシステムLaravel(PHP)vs。Python:開発環境とエコシステムApr 12, 2025 am 12:10 AM

開発環境とエコシステムにおけるLaravelとPythonの比較は次のとおりです。1。Laravelの開発環境は簡単で、PHPと作曲家のみが必要です。 Laravelforgeなどの豊富な範囲の拡張パッケージを提供しますが、拡張パッケージのメンテナンスはタイムリーではない場合があります。 2。Pythonの開発環境もシンプルで、PythonとPIPのみが必要です。エコシステムは巨大で複数のフィールドをカバーしていますが、バージョンと依存関係の管理は複雑な場合があります。

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 02, 2025 pm 02:16 PM

Laravelの人気には、単純化された開発プロセスが含まれ、快適な開発環境を提供し、豊富な機能が提供されます。 1)Rubyonrailsの設計哲学を吸収し、PHPの柔軟性を組み合わせています。 2)Eloquentorm、Bladeテンプレートエンジンなどのツールを提供して、開発効率を向上させます。 3)そのMVCアーキテクチャと依存関係噴射メカニズムにより、コードがよりモジュール化され、テスト可能になります。 4)キャッシュシステムやベストプラクティスなどの強力なデバッグツールとパフォーマンス最適化方法を提供します。

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

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

どちらがより良い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でカスタムブレードディレクティブを作成および使用するにはどうすればよいですか?Mar 17, 2025 pm 02:50 PM

この記事では、Laravelでカスタムブレードディレクティブの作成と使用を行い、テンプレートを強化します。ディレクティブの定義、テンプレートでそれらを使用し、大規模なプロジェクトでそれらを管理することをカバーし、改善されたコードの再利用性やRなどの利点を強調しています

Laravelのコンポーネントを使用して再利用可能なUI要素を作成するにはどうすればよいですか?Laravelのコンポーネントを使用して再利用可能なUI要素を作成するにはどうすればよいですか?Mar 17, 2025 pm 02:47 PM

この記事では、コンポーネントを使用してLaravelで再利用可能なUI要素の作成とカスタマイズについて説明し、組織のベストプラクティスを提供し、パッケージを強化することを提案します。

See all articles

ホット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衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

AtomエディタMac版ダウンロード

AtomエディタMac版ダウンロード

最も人気のあるオープンソースエディター

MantisBT

MantisBT

Mantis は、製品の欠陥追跡を支援するために設計された、導入が簡単な Web ベースの欠陥追跡ツールです。 PHP、MySQL、Web サーバーが必要です。デモおよびホスティング サービスをチェックしてください。

ZendStudio 13.5.1 Mac

ZendStudio 13.5.1 Mac

強力な PHP 統合開発環境

EditPlus 中国語クラック版

EditPlus 中国語クラック版

サイズが小さく、構文の強調表示、コード プロンプト機能はサポートされていません

SecLists

SecLists

SecLists は、セキュリティ テスターの究極の相棒です。これは、セキュリティ評価中に頻繁に使用されるさまざまな種類のリストを 1 か所にまとめたものです。 SecLists は、セキュリティ テスターが必要とする可能性のあるすべてのリストを便利に提供することで、セキュリティ テストをより効率的かつ生産的にするのに役立ちます。リストの種類には、ユーザー名、パスワード、URL、ファジング ペイロード、機密データ パターン、Web シェルなどが含まれます。テスターはこのリポジトリを新しいテスト マシンにプルするだけで、必要なあらゆる種類のリストにアクセスできるようになります。