Laravel で コマンドラインアプリケーション を作成する
シェルスクリプトやバッチからLaravelの関数をキックしたいなぁ、と思ったのだけどどうしたらいいかよくわからんなぁ、と思っていたらコマンドラインアプリケーションなるものがあるのでそれを作る(ほかにはweb api経由で呼び出す、という方法があり、まぁなんかそっちのほうがLaravel的にはきれいじゃね?とか思ったけどまぁいいや)
コマンドラインアプリケーションの作り方
Windowsで説明。
php artisan test:hoge と打つとLaravelサーバ上のHogeController::handle関数がキックされるようにする。
(handle関数内でさらにほかのControllerを呼び出すことで任意の関数を呼び出す)
まずはコマンドプロンプトを開き以下を実施してコマンドコントローラーを作成する。
コマンドコントローラーは1コマンドにつき1つ作ったほうがわかりやすい。
php artisan make:command TestHoge
すると、以下のファイルができるので、
\app\Console\Commands\TestHoge.php
/**
* The name and signature of the console command.
*
* @var string
*/
protected $signature = 'app:test-hoge';
→
protected $signature = 'test:hoge';
んで、昔は
\app\Console\Kernel.php
/**
* The Artisan commands provided by your application.
*
* @var array
*/
protected $commands = [
\App\Console\Commands\TestHoge::class,
];
protected function commands(): void
{
$this->load(__DIR__.'/Commands');
この状態で、
php artisan list
test
test:hoge Command description
で、
php artisan test:hoge
/**
* Execute the console command.
*/
public function handle()
{
Log::info("Hello World!");
}
んで、このhandleの中でごちゃごちゃ書くというよりも、handleの中から他のControllerのクラスを呼び出して使う。
例えばHogeControllerのhoge()を呼び出したい場合、useを設定して、newすれば使える。
use App\Http\Controllers\HogeController;
~
public function handle()
{
$controller = new HogeController();
$result = $controller->hoge();
}
以上。