はじめに
今回の記事では、PHPのフレームワークであるLaravelのルーティングやコントローラに関する基礎知識を紹介します。Laravelの基礎知識に関してはこちらをご覧ください。
ルーティング
Laravelのルートティングは、routesディレクトの web.php と api.php に定義します。
ルーティングの定義方法は3種類あり、1つ目はクラス名とメソッド名を記述する方法です。以下の例では、 /home 宛のリクエストを HomeController の index メソッドで処理します。
| 1 | Route::get('/home', 'HomeController@index'); | 
2つ目はクラス名のみを指定する方法です。メソッド名を省略した場合は __invoke メソッドで処理します。
| 1 | Route::get('/home', 'HomeController@index'); | 
3つ目はクロージャで記述する方法です。
| 1 2 3 | Route::get('/home', function () {     return 'Hello World'; }); | 
使用可能なメソッド
Laravelで使用できるメソッドは下記のとおりです。
| 1 2 3 4 5 6 | Route::get($uri, $callback); Route::post($uri, $callback); Route::put($uri, $callback); Route::patch($uri, $callback); Route::delete($uri, $callback); Route::options($uri, $callback); | 
以下のように複数のメソッドに対応したルートを定義することもできます。
| 1 2 3 | Route::match(['get', 'post'], '/home', function () {     return 'Hello, World' }); | 
また、Route::any を使うとすべてのメソッドに対応したルートを定義することができます。
| 1 2 3 | Route::any('/home', function () {     return 'Hello World' }); | 
リダイレクト
他のURIにリダイレクトさせたい場合は Route::redirect を使います。
| 1 | Route::redirect('/before', '/after', 301); | 
Viewの返却
コントローラ側で処理せずに特定のビューを返却すればよい場合は、 Route::view を使います。第2引数にはビュー名を渡します。ビューへデータを渡したい場合は第3引数に配列の形で渡します。
| 1 | Route::view('/top', 'top', ['title' => 'Top']); | 
ルートパラメータ
CRUDの画面などのように、ルート中のURIセグメントを取得したい場合は以下のようにします。
| 1 2 3 | Route::get('post/{id}', function ($id) {     return 'Post ID = '.$id; }); | 
パラメータ名の後に ? をつけるとパラメータを省略することができます。この場合は、デフォルト値を設定する必要があります。
| 1 2 3 | Route::get('post/{id?}', function ($id = 1) {     return 'Post ID = '.$id; }); | 
ミドルウェア
ルートグループ内のすべてのルートにミドルウェアを指定するには Route::middleware メソッドを使用します。このとき、ミドルウェアは定義された順番で実行されます。
| 1 2 3 4 | Route::middleware(['mid1', 'mid2'])->group(function () {     Route::get('/home', 'HomeController@index');     Route::get('/home{id}', 'HomeController@show'); }); | 
プレフィックス
ルートグループ内のすべてのルートに特定のプレフィックスを指定するには Route::prefix メソッドを使用します。
| 1 2 3 4 | Route::prefix('admin')->group(function () {     Route::get('users', 'UsersController@index');     Route::get('users/{id}', 'UsersController@show'); }); | 
バリデーション
Laravelではコントローラ側でバリデーションを行います。バリデーションの方法は2種類あり、1つ目はコントローラに直接記述する方法で、2つ目はフォームリクエスに記述する方法です。
コントローラでバリデーション
コントローラでバリデーションする場合は以下のようになります。バリデーションに失敗した場合は例外が投げられます。
| 1 2 3 4 5 6 7 8 9 | public function store(Request $request) {     $validatedData = $request->validate([         'name'  => 'required|max:32',         'email' => 'required|unique|max:255',     ]);     // バリデーション通過後の処理 } | 
バリデーション失敗時に特定の処理をしたい場合は、以下のようにします。
| 1 2 3 4 5 6 7 8 9 10 11 12 13 | public function store(Request $request) {     $validator = Validator::make($request->all(), [         'name'  => 'required|max:32',         'email' => 'required|unique|max:255',     ]);     if ($validator->fails()) {         // バリデーション失敗時の処理     }     // バリデーション通過後の処理 } | 
フォームリクエストでバリデーション
フォームリクエストは以下のコマンドで作成できます。
| 1 | $ php artisan make:request UserPost | 
フォームリクエストでバリデーションする場合は以下のようになります。
| 1 2 3 4 5 6 7 | public function rules() {     return [         'name'  => 'required|max:32',         'email' => 'required|unique|max:255',     ]; } | 
また、エラーメッセージのカスタマイズは以下のようにします。
| 1 2 3 4 5 6 7 | public function messages() {     return [         'name.required'  => '名前は必須です',         'email.required' => 'メールアドレスは必須です',     ]; } | 
さいごに
Laravelのルート定義とバリデーションの書き方を紹介しました。
 
  
 
 
 
 
 
 
