アーティザンコマンドライン
- Tinker コマンド (REPL)
- #コマンドの生成
- コマンド構造パラメータ
- オプション
- 入力配列
- #入力説明
- I/Oコマンド
- 取得入力
- #対話型入力
- 他のコマンドからコマンドを呼び出す
- はじめに
list コマンドを使用します。
php artisan list各コマンドには、コマンドで使用可能なパラメータとオプションを表示および要約するヘルプ インターフェイスが含まれています。コマンドのヘルプ インターフェイスを表示するには、コマンドの前に
php artisan help migrate
Tinker command (REPL )
php artisan tinker
vendor:publish
コマンドを使用して Tinker 構成ファイルを公開できます:php artisan vendor:publish --provider="Laravel\Tinker\TinkerServiceProvider"
コマンド ホワイトリスト
Tinker はホワイトリストを使用して、シェル内でどの Artisan コマンドの実行を許可するかを決定します。デフォルトでは、clear-compiled
、down
、env
、inspire
、merge
、# # を実行できます。 #optimize および
up コマンド。ホワイトリスト コマンドをさらに追加したい場合は、
tinker.php 構成ファイルの
commands 配列にコマンドを追加できます:
'commands' => [ // App\Console\Commands\ExampleCommand::class, ],
tinker.php 構成ファイルの
dont_alias 配列でこれらのクラスを列挙します。
Artisan が提供するコマンドに加えて、独自のカスタム コマンドを作成することもできます。通常、コマンドは app/Console/Commands
ディレクトリに保存されますが、Composer でコマンドをロードできる限り、独自の保存場所を自由に選択できます。新しいコマンドを作成するには、Artisan コマンドを使用しますmake:command# # #。このコマンドは、
app/Console/Commandsを初めて実行するときに作成されるため、アプリケーションに存在しなくても心配する必要はありません。生成されたコマンドには、すべてのコマンドにデフォルトで存在するプロパティとメソッドが含まれます。
'dont_alias' => [ App\User::class, ],
コマンド構造
コマンドの実行 最後に、php 職人リスト を入力するときに使用法を明確に理解できるように、最初に
signature属性を入力する必要があります。コマンドの実行時に
handle メソッドが呼び出され、このメソッドにコマンド ロジックを配置できます。 {ヒント} コードを再利用しやすくするには、コンソール コードを軽量に保ち、完了をアプリケーション サービスに延期することが最善です。次の例では、電子メールを送信するタスクを完了するためにサービス クラスを挿入します。
簡単な例を見てみましょう。必要な依存関係は
handle
メソッドに注入できます。 Laravel サービス コンテナは、コンストラクターの型制約を持つすべての依存関係を自動的に挿入します。
php artisan make:command SendEmails
クロージャ ベースのコマンドは、コンソール コマンドを定義する代わりにクラスを使用する方法を提供します。同様に、クロージャ ルーティングはコントローラの代替であり、クロージャ コマンドはコマンド クラスの代替と考えることができます。 このファイルは HTTP ルートを定義しませんが、アプリケーションへのコンソールベースのエントリ ポイント (ルート) を定義します。このファイルでは、 クロージャは基礎となるコマンド インスタンスをバインドします。完全なコマンド クラスで使用できるメソッドにアクセスできます。 コマンド クロージャは、コマンド パラメーターとオプションを受け取るだけでなく、タイプ ヒントを使用してサービス コンテナーからの他の依存関係を解決することもできます。 クロージャ コマンドを定義するときは、 signature required パラメータを定義します: userクロージャ コマンド
app/Console/Kernel.php
ファイルの commands
メソッドで、Laravel は routes/console.php
ファイルをロードします:<?php
namespace App\Console\Commands;
use App\User;use App\DripEmailer;
use Illuminate\Console\Command;
class SendEmails extends Command{
/**
* The name and signature of the console command.
*
* @var string
*/
protected $signature = 'email:send {user}';
/**
* The console command description.
*
* @var string
*/
protected $description = 'Send drip e-mails to a user';
/**
* Create a new command instance.
*
* @return void
*/
public function __construct() {
parent::__construct();
}
/**
* Execute the console command.
*
* @param \App\DripEmailer $drip
* @return mixed
*/
public function handle(DripEmailer $drip)
{
$drip->send(User::find($this->argument('user')));
}
}
Artisan::command
メソッドを使用してすべてのクロージャ ルートを定義できます。 command
このメソッドは 2 つのパラメータを受け入れます: コマンド名 とコマンド パラメータとオプションを受け入れるクロージャ: /**
* Register the Closure based commands for the application.
*
* @return void
*/
protected function commands(){
require base_path('routes/console.php');
}
タイプヒントによる依存関係
Artisan::command('build {project}', function ($project) {
$this->info("Building {$project}!");
});
クロージャ コマンドの説明
describe
メソッドを使用してコマンドに説明を追加する必要があります。この説明は、phpArtisanList
または phpArtisanhelp
コマンドを実行すると表示されます: use App\User;
use App\DripEmailer;Artisan::command('email:send {user}', function (DripEmailer $drip, $user) {
$drip->send(User::find($user));
});
属性を通じてユーザーが入力するものを簡単に定義できます。
signature 単一の可読性の高い、ルートに似た構文を使用して、コマンド名、パラメーター、およびオプションを定義できます。
:
Artisan::command('build {project}', function ($project) {
$this->info("Building {$project}!");
})->describe('Build the project');
/** * The name and signature of the console command. * * @var string */ protected $signature = 'email:send {user}';オプションオプションは、パラメーターと同様、ユーザー入力の別の形式です。コマンドラインでオプションを指定する場合、オプションの先頭には 2 つのハイフン (
-- ) が付けられます。オプションには、値を受け取るものと値を受け取らないものの 2 種類があります。値を受け入れないオプションは、ブール値の「スイッチ」に似ています。このタイプのオプションの例を見てみましょう。
// 可选参数... email:send {user?} // 带有默认值的可选参数... email:send {user=foo}この例では、Artisan コマンドを呼び出すときに
--queue スイッチを指定できます。
--queue スイッチが渡された場合、このオプションの値は
true、それ以外の場合は
false:
/** * 命令行的名称及签名。 * * @var string */ protected $signature = 'email:send {user} {--queue}';##
値のあるオプション
次に、値のあるオプションを見てみましょう。ユーザーにオプションの値を指定させる必要がある場合は、オプション名の末尾に等号 =
をサフィックスとして追加する必要があります:
php artisan email:send 1 --queue
この例ではの場合、ユーザーは次のようにオプションの値を渡すことができます。
/** * 命令行的名称及签名。 * * @var string */ protected $signature = 'email:send {user} {--queue=}';
オプション名の後にデフォルト値を指定して、オプションのデフォルト値を設定することもできます。ユーザーがオプション値を渡さない場合、設定されたデフォルト値が使用されます:
php artisan email:send 1 --queue=default
オプションの省略形
は次のとおりです。 オプションを定義するときに省略形を指定するには、オプション名の前に省略形を指定し、|
区切り文字を使用して完全なオプション名から省略形を区切ることができます:
email:send {user} {--queue=default}
入力配列
配列入力を受け取るパラメーターまたはオプションを定義する場合は、# 表記を使用できます。 。まず、配列パラメーターの例を見てみましょう。
email:send {user} {--Q|queue}
このメソッドを呼び出すと、user
パラメーターの入力パラメーターをコマンド ラインに順番に渡すことができます。たとえば、次のコマンドは user の値を ['foo', 'bar']
に設定します。
email:send {user*}
配列を受け取るオプションを定義する場合、各オプションの値はコマンドラインにはオプション名をプレフィックスとして付ける必要があります:
php artisan email:send foo bar
説明を入力してください
パラメータとオプションを指定できます。説明を追加して別々にします。コマンドを定義するためにもう少しスペースが必要な場合は、自由に複数行に分割してください:
email:send {user} {--id=*} php artisan email:send --id=1 --id=2
Command I/ O
Get input
コマンドが実行されると、明らかに、によって受け取られたパラメータとオプションを取得する必要があります。コマンド値。 argument
メソッドと option
メソッドを使用して目的を達成できます。
/** * 命令行的名称及签名。 * * @var string */ protected $signature = 'email:send {user : The ID of the user} {--queue= : Whether the job should be queued}';
すべてのパラメータを array
配列として取得したい場合arguments
メソッド:
/** * 执行命令。 * * @return mixed */ public function handle(){ $userId = $this->argument('user'); // }
パラメータの取得と同様に、option
メソッドはオプションの値を簡単に取得できます。すべてのオプションを配列として取得するには、options
メソッドを使用します。
$arguments = $this->arguments();
パラメータまたはオプションが存在しない場合は、null
が返されます。
対話型入力
出力を表示するだけでなく、コマンドの実行中にユーザーに入力を求めることもできます。 ask
メソッドはユーザーに入力を求めてそれを受け取り、ユーザーの入力はコマンドに渡されます:
// 获取一个指定的选项值 $queueName = $this->option('queue'); // 获取所有的选项值 $options = $this->options();
secret
メソッドと ask
方法は似ていますが、ユーザーがコンソールに入力すると、その入力は非表示になります。この方法は、ユーザーがパスワードなどの機密情報を入力する必要がある場合に適しています。
/** * 执行命令。 * * @return mixed */ public function handle(){ $name = $this->ask('What is your name?'); }
確認の要求
ユーザーに簡単な情報の確認を求める場合は、次のようにします。 confirm
メソッドを使用できます。デフォルトでは、このメソッドは false
を返します。ただし、ユーザーが応答に y
または yes
を入力すると、true
が返されます。
$password = $this->secret('What is the password?');
Autocomplete
anticipate
メソッドを使用して、可能な選択肢のオートコンプリートを提供できます。ユーザーはオートコンプリート プロンプトを無視して、任意の回答を入力できます。
if ($this->confirm('Do you wish to continue?')) { // }
Multiple Choice
ユーザーにいくつかの事前設定された選択肢を提供したい場合は、次のようにすることができます。 choice
メソッドを使用します。ユーザーに選択の余地がない状況に対処するために、デフォルト値のインデックスを設定することもできます。
$name = $this->anticipate('What is your name?', ['Taylor', 'Dayle']);
出力の書き込み
line
、info
、comment
、question
、error
メソッドを使用して、出力を端末に送信します。各メソッドは、適切な ANSI
色を使用してその目的を示します。たとえば、一般的な情報をユーザーに表示してみましょう。一般的には、出力をコンソールに緑色で表示する info
メソッドを使用するのが最善です。エラー メッセージを表示するには、
メソッドを使用します。エラー メッセージは赤色で表示されます:
色の設定をせずに出力をコンソールに表示したい場合は、$name = $this->choice('What is your name?', ['Taylor', 'Dayle'], $defaultIndex);
メソッドを使用してください: /**
* 执行命令。
*
* @return mixed
*/
public function handle(){
$this->info('Display this on the screen');
}
複数行および行データの書式設定された出力の場合、
table メソッドの方が扱いが簡単です。受信したテーブルヘッダーと行データに基づいて、幅と高さを動的に計算します。 $this->error('Something went wrong!');
時間のかかるタスクの場合、これは非常に必要です。進歩を促すために。出力オブジェクトを使用して、進行状況バーを作成、ロード、および停止します。まず、タスクの合計ステップ数を定義し、タスクが実行されるたびにプログレス バーをロードします。
$this->line('Display this on the screen');
より高度な使用方法については、
Symfony プログレス バー コンポーネントのドキュメントコマンドの登録
app/Console/Commands
コンソールカーネルの commands
メソッドが ## を呼び出すため、ディレクトリ内のコマンドが登録されます。 # 負荷###。実際、load
を自由に呼び出して、他のディレクトリにある Artisan コマンドをスキャンできます。 $headers = ['Name', 'Email'];
$users = App\User::all(['name', 'email'])->toArray();
$this->table($headers, $users);
を実行することもできます。 # file $commands 属性に手動で登録したコマンドのクラス名。 Artisan が起動すると、この属性にリストされているコマンドがサービス コンテナによって解析され、Artisan に登録されます:
$users = App\User::all(); $bar = $this->output->createProgressBar(count($users)); $bar->start();foreach ($users as $user) { $this->performTask($user); $bar->advance(); }$bar->finish();
プログラム呼び出しコマンド場合によっては、たとえば、ルートまたはコントローラーでアーティザン コマンドをトリガーする場合など、CLI の外部でアーティザン コマンドを実行する必要があります。呼び出しを実装するには、Artisan
ファサードのcall メソッドを使用できます。
call メソッドの最初のパラメーターはコマンド名を受け取り、2 番目のパラメーターは配列の形式でコマンド パラメーターを受け取ります。終了コードが返されます:
/** * 注册应用的命令 * * @return void */ protected function commands(){ $this->load(__DIR__.'/Commands'); $this->load(__DIR__.'/MoreCommands'); // ... }
あるいは、Artisan コマンド全体を文字列として
call メソッドに渡すこともできます: protected $commands = [ Commands\SendEmails::class ];
Artisan facade queue このメソッドは、アーティザン コマンドをキューに入れ、バックグラウンド処理のためにキュー ワーカー プロセスに渡すことができます。この方法を使用する前に、必ずキューを設定し、キュー リスナーを実行してください:
Route::get('/foo', function () { $exitCode = Artisan::call('email:send', [ 'user' => 1, '--queue' => 'default' ]); // });
Artisan コマンドによってディスパッチされる接続またはタスクを指定することもできます:
Artisan::call('email:send 1 --queue=default');
# #配列値を渡す
Route::get('/foo', function () { Artisan::queue('email:send', [ 'user' => 1, '--queue' => 'default' ]); // });
ブール値を渡す
コマンドの
--force オプションは、true## を渡すことができます。 # または
false:
Artisan::queue('email:send', [ 'user' => 1, '--queue' => 'default' ])->onConnection('redis')->onQueue('commands');
call
メソッドは、配列形式でコマンド名とオプションを受け取ります。Route::get('/foo', function () { $exitCode = Artisan::call('email:send', [ 'user' => 1, '--id' => [5, 13] ]); });
コンソール コマンドのすべての出力を抑制したい場合は、
callSilent# ## 方法。 callSilent
の使用方法は call と同じです:
この記事は、$exitCode = Artisan::call('migrate:refresh', [
'--force' => true,
]);
LearnKu.com
Web サイトで最初に公開されました。