laravel artisan command 추가하기
artisan 은 라라벨에 포함되어 있는 커맨드 라인 유틸리티로 라라벨 개발을 도와 주는 명령어의 모음입니다.
make:console
artisan 의 make 명령어중 console 로 artisan 에 새로운 명령을 추가할 수 있습니다.
$ php artisan make:console FooBars --command=foo:bar
--command=foo:bar 는 php artisan foo:bar 로 추가된 명령어를 실행할 수 있게 합니다.
Command class는 app/Console/Commands/FooBars.php 로 존재합니다.
Console Kernel 에 추가
아직은 artisan list 명령어를 실행해도 추가된 명령이 보이지 않을 것입니다.
app/Console/Kernel.php 에 추가된 클래스를 수동으로 등록해 주어야 artisan 에서 인식할 수 있습니다.
protected $commands = [ \App\Console\Commands\Inspire::class, \App\Console\Commands\FooBars::class, ];
$ php artisan list | grep foofoo foo:bar Command description.
기능 구현
실행할 동작은 Commands 의 handle () 메소드에 추가하면 됩니다.
public function handle() { // $this->info('Name: '); }
$ php artisan foo:bar Name:
argument 처리
명령어 실행시 아규먼트를 받아서 더욱 유연하게 만들고 싶을 수 있습니다. 라라벨 5.1 부터 command signature 기능이 개선되어 손쉽게 처리할 수 있습니다.
받아들일 아규먼트는 $signature 변수에 {var} 형식으로 기술하면 되며 handle() 에서 $this->argument('var') 와 같이 전달된 아규먼트에 접근할 수 있습니다.
다음은 name 이라는 아규먼트를 받는 Command 예제입니다.
protected $signature = 'foo:bar {name}'; public function handle() { // $this->info('Name:' . $this->argument('name')); }
$ php artisan foo:bar lesstif Name: lesstif
아규먼트가 없을 경우 다음과 같이 RuntimeException 예외가 발생합니다.
$ php artisan foo:bar [RuntimeException] Not enough arguments.
이 문제는 아규먼트를 생략 가능(? 추가)하게 하거나 아규먼트에 기본 값을 설정하면 됩니다.
protected $signature = 'foo:bar {name?}';
protected $signature = 'foo:bar {name=lesstif}';
옵션 처리
아규먼트대신 -- 를 이용하여 옵션으로 처리하고 싶을 경우도 $signature 에 수정하면 되며 대신 옵션 앞에 -– 를 추가하면 됩니다.
전달된 옵션은 $this->option() 메소드로 접근할 수 있습니다.
protected $signature = 'foo:bar {name=lesstif} {--level=1}'; public function handle() { $this->info('name:' . $this->argument('name') . ' Level:' . $this->option('level')); }
$ php artisan foo:bar --level=5 name:lesstif Level:5 $ php artisan foo:bar name:lesstif Level:1