Laravel シングルアクションコントローラ作成方法

Laravelでは、コントローラでそのアプリケーション全体の制御を行います。

コントローラでの処理は、アクションと呼ばれ、メソッドの形で使用します。

本記事では、コントローラでは、複数のアクションをもつコントローラではなく、1つのコントローラに1つのアクションだけ用いる方法を紹介します。

因みにLaravelのバージョンは、~7です。

8では、ルーティングに変更がありました。

詳しくは、こちらの記事で

方法

先ずは、複数のアクションのコントローラでは以下のように記述します。

multipleController.php

//省略
class multipleController extends Controller{
    public function sample(){
        //処理
    }
}

web.php

Route::get('/multiple','multipleController@sample');

対して、1つのアクションのコントローラ(シングルアクションコントローラ)は、以下のように記述します。

singleController.php

//省略
class singleController extends Controller{
    public function __invoke(){
        //処理
    }
}

web.php

Route::get('/single',singleController);

両者の違いは、シングルアクションコントローラでは、メソッド__invokeを用います。

アンダーバーは2つなので注意!

また、ルーティングもメソッド名が必要なく、コントローラ名のみになります。

メリット

1つのコントローラに1つのアクションを置くことでコントローラを見たときに可読性が高くなり、なにかエラーがでても直ぐにどこがエラーなのか分かりやすいです。

このアクションでエラーが出たら、あのコントローラを見ればいいというように。

しかし、結局は、複数のアクションコントローラでもシングルアクションコントローラでも自分次第ってところだと思います。