[Laravel] Console出力系のCommand一覧
\Illuminate\Console\Command クラスではスクリプト実行時にコンソール上にログなどを出力するメソッドがあります。
各メソッドにより、コンソール上で確認しやすくなるようにメッセージを色付けしてくれます。
バッチ処理などに使うJobや、Seeder等で利用されています。
/**
* Write a string as information output.
*
* @param string $string
* @return void
*/
public function info($string)
{
$this->output->writeln("<info>$string</info>");
}
/**
* Write a string as standard output.
*
* @param string $string
* @return void
*/
public function line($string)
{
$this->output->writeln($string);
}
/**
* Write a string as comment output.
*
* @param string $string
* @return void
*/
public function comment($string)
{
$this->output->writeln("<comment>$string</comment>");
}
/**
* Write a string as question output.
*
* @param string $string
* @return void
*/
public function question($string)
{
$this->output->writeln("<question>$string</question>");
}
/**
* Write a string as error output.
*
* @param string $string
* @return void
*/
public function error($string)
{
$this->output->writeln("<error>$string</error>");
}
/**
* Write a string as warning output.
*
* @param string $string
* @return void
*/
public function warn($string)
{
if (! $this->output->getFormatter()->hasStyle('warning')) {
$style = new OutputFormatterStyle('yellow');
$this->output->getFormatter()->setStyle('warning', $style);
}
$this->output->writeln("<warning>$string</warning>");
}
サンプル:
<?php
use Illuminate\Database\Seeder;
use Illuminate\Database\Eloquent\Model;
class DatabaseSeeder extends Seeder
{
/**
* Run the database seeds.
*
* @return void
*/
public function run()
{
$this->command->info('info command');
$this->command->line('line command');
$this->command->comment('comment command');
$this->command->question('question command');
$this->command->error('error command');
$this->command->warn('warn command');
}
}
また、コンソール上で対話可能なメソッドも用意されており、 入力によって異なる動作をする場合などに役立ちます。
$this->command->confirm()
確認を答うメソッドです。 戻り値として true | false が返却されます。
/**
* Confirm a question with the user.
*
* @param string $question
* @param bool $default
* @return bool
*/
public function confirm($question, $default = false)
{
return $this->output->confirm($question, $default);
}
サンプル:
<?php
use Illuminate\Database\Seeder;
use Illuminate\Database\Eloquent\Model;
class DatabaseSeeder extends Seeder
{
/**
* Run the database seeds.
*
* @return void
*/
public function run()
{
if($this->command->confirm('test question?')) {
// 確認後に実行される
$this->command->line('passed!');
}
}
}
実行:
$ php artisan db:seed
test question? (yes/no) [no]:
> yes
passed!
$this->command->ask()
コンソールへの入力を求めるメソッドです。 戻り値として入力された内容が返却されます。
/**
* Prompt the user for input.
*
* @param string $question
* @param string $default
* @return string
*/
public function ask($question, $default = null)
{
return $this->output->ask($question, $default);
}
サンプル:
<?php
use Illuminate\Database\Seeder;
use Illuminate\Database\Eloquent\Model;
class DatabaseSeeder extends Seeder
{
/**
* Run the database seeds.
*
* @return void
*/
public function run()
{
$ask = $this->command->ask('Enter Your Name.');
// 入力された内容を受け取ります
$this->command->line("Your name is {$ask}.");
}
}
実行:
$ php artisan db:seed
Enter Your Name.:
> xzxzyzyz
Your name is xzxzyzyz.
$this->command->askWithCompletion()
入力されるであろう内容を事前に登録しておくことで、コンソールでの入力を補完してくれます。 戻り値として入力された内容が返却されます。 ※ $this->command->anticipate() のエイリアスです。
/**
* Prompt the user for input with auto completion.
*
* @param string $question
* @param array $choices
* @param string $default
* @return string
*/
public function anticipate($question, array $choices, $default = null)
{
return $this->askWithCompletion($question, $choices, $default);
}
/**
* Prompt the user for input with auto completion.
*
* @param string $question
* @param array $choices
* @param string $default
* @return string
*/
public function askWithCompletion($question, array $choices, $default = null)
{
$question = new Question($question, $default);
$question->setAutocompleterValues($choices);
return $this->output->askQuestion($question);
}
サンプル:
use Illuminate\Database\Seeder;
use Illuminate\Database\Eloquent\Model;
class DatabaseSeeder extends Seeder
{
/**
* Run the database seeds.
*
* @return void
*/
public function run()
{
$ask = $this->command->anticipate('Enter Your Name.', ['xzxzyzyz', 'yzyzxzxz']);
// 入力された内容を受け取ります
$this->command->line("Your name is {$ask}.");
}
}
実行:
$ php artisan db:seed
Choice or Enter your name.:
> xzxzyzyz
Your name is xzxzyzyz.
x
を入力すると、xzxzyzyz
を補完してくれるはずです。
$this->command->secret()
コンソールへの入力を求めるメソッドですが、入力内容が表示されません。 戻り値として入力された内容が返却されます。
/**
* Prompt the user for input but hide the answer from the console.
*
* @param string $question
* @param bool $fallback
* @return string
*/
public function secret($question, $fallback = true)
{
$question = new Question($question);
$question->setHidden(true)->setHiddenFallback($fallback);
return $this->output->askQuestion($question);
}
サンプル:
<?php
use Illuminate\Database\Seeder;
use Illuminate\Database\Eloquent\Model;
class DatabaseSeeder extends Seeder
{
/**
* Run the database seeds.
*
* @return void
*/
public function run()
{
$ask = $this->command->secret('Enter Password.');
// 入力された内容を受け取ります
$this->command->line("Password is {$ask}.");
}
}
実行:
$ php artisan db:seed
Enter Password.:
>
Password is xzxzyzyz.
$this->command->choice()
用意した候補から、コンソール上で選択できます。 戻り値として選択された内容が返却されます。
/**
* Give the user a single choice from an array of answers.
*
* @param string $question
* @param array $choices
* @param string $default
* @param mixed $attempts
* @param bool $multiple
* @return string
*/
public function choice($question, array $choices, $default = null, $attempts = null, $multiple = null)
{
$question = new ChoiceQuestion($question, $choices, $default);
$question->setMaxAttempts($attempts)->setMultiselect($multiple);
return $this->output->askQuestion($question);
}
サンプル:
<?php
use Illuminate\Database\Seeder;
use Illuminate\Database\Eloquent\Model;
class DatabaseSeeder extends Seeder
{
/**
* Run the database seeds.
*
* @return void
*/
public function run()
{
$ask = $this->command->choice('Choice', ['xzxzyzyz', 'yzyzxzxz', 'etc..']);
// 入力された内容を受け取ります
$this->command->line("Choice is {$ask}.");
}
}
実行:
$ php artisan db:seed
Choice:
[0] xzxzyzyz
[1] yzyzxzxz
[2] etc..
> 0
Choice is xzxzyzyz.
最後に
Laravel上では\Illuminate\Console\Command
クラスを参照していますが、
\Illuminate\Console\Command
で定義されている $this->output
には\Symfony\Component\Console\Style\SymfonyStyle
が代入されており、
コンソール出力に関する動作はこちらを参考に。