ふたりはララベル (Laravel PHP Framework)

PHPフレームワークのLaravelの体験記を書いていきます。こんなタイトルのブログですが萌え系アニメは一秒たりとも観たことがありません。

Laravelの自作コマンドで引数を取得する

自作コマンドを作成してみた。

php artisan command:make testFutari --command=test:futari


上記コマンドで生成されたソースにfire()とgetArguments()とgetOptions()の中身を追記した。

<?php

use Illuminate\Console\Command;
use Symfony\Component\Console\Input\InputOption;
use Symfony\Component\Console\Input\InputArgument;

class testFutari extends Command {

  /**
   * The console command name.
   *
   * @var string
   */
  protected $name = 'test:futari';

  /**
   * The console command description.
   *
   * @var string
   */
  protected $description = 'Command description.';

  /**
   * Create a new command instance.
   *
   * @return void
   */
  public function __construct()
  {
    parent::__construct();
  }

  /**
   * Execute the console command.
   *
   * @return mixed
   */
  public function fire()
  {
    print 'example = ' . $this->argument('example') . "\n";
    print 'optional = ' . $this->option('optional') . "\n";
    print 'none = ' . $this->option('none') . "\n";
  }

  /**
   * Get the console command arguments.
   *
   * @return array
   */
  protected function getArguments()
  {
    return array(
      array('example', InputArgument::REQUIRED, 'An example argument.'),
    );
  }

  /**
   * Get the console command options.
   *
   * @return array
   */
  protected function getOptions()
  {
    return array(
      array('optional', '-o', InputOption::VALUE_OPTIONAL, 'An example option.', null),
      array('none', null, InputOption::VALUE_NONE, 'An example option.', null),
    );
  }

}


そしてコマンドを実行したらこんな結果になった。

$ php artisan test:futari aaa -o bbb --none
example = aaa
optional = bbb
none = 1

ちなみにソース上でコマンドを実行する時は以下のように書く。

Artisan::call('test:futari', [
  'example' => 'aaa',
  '-o' => 'bbb',
  '--none' => true
]);