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つのアクションを置くことでコントローラを見たときに可読性が高くなり、なにかエラーがでても直ぐにどこがエラーなのか分かりやすいです。
このアクションでエラーが出たら、あのコントローラを見ればいいというように。
しかし、結局は、複数のアクションコントローラでもシングルアクションコントローラでも自分次第ってところだと思います。