Laravel8 ルーティング

Laravel8からルーティングの記載のお作法が変わったらしい

作成日:2022-11-30, 更新日:2022-11-30

ルーティングに関係のあるファイル

  • routes/xxx.php
  • app/Providers/RouteServiceProvider.php

viewを開く

▼routes/xxx.php

Route::get('/', function () {
    return view('welcome'); // 「method: get」で「/」にアクセスがあったら「resources/welcome.blade.php」を出力
});

コントローラーに飛ばす

フルPATH指定、useで指定と記載法がある

useで指定

▼routes/api.phpに記載したときの例(※routes/web.phpに記載するときも同じお作法)

use App\Http\Controllers\Api;
~ 省略 ~
Route::post('/foo', [Api\hoge::class, 'test']); // 「method: post」で「api/foo」にアクセスがあったら「App\Http\Controllers\Api\hoge.php」の「test()」を実行

※「::class」ってのは決め打ちっぽい

useでファイルまで指定

useの記載が増えるってのが個人的に苦手。さらにコントローラーを修正するときに「Route::xxx()」を見て、そこから数あるuseの中から対象のファイルを探すってのが面倒に感じる

use App\Http\Controllers\Api\hoge;
~ 省略 ~
Route::post('/foo', [hoge::class, 'test']);

フルPATH指定

長くなるので個人的には避けたい

~ 省略 ~
Route::post('/foo', 'App\Http\Controllers\Api\hoge@test');

コントローラーとの兼ね合い

コントローラー側には「request型」が引数で渡ってくるっぽい

▼こんな感じのルーティング

use App\Http\Controllers\Api;
~ 省略 ~
Route::post('/foo', [Api\hoge::class, 'test']);

▼コントローラー側: App\Http\Controllers\Api\hoge.php

~ 省略 ~
use Illuminate\Http\Request; // ← コイツが必要らしい。「vendor\laravel\framework\src\Illuminate」の中にいる
~ 省略 ~

class hoge extends Controller {
    public function test(Request $request){ // $requestに色々と格納されるっぽい
        var_dump($request);
        exit;
    }
}

▼単純な入力値をマルっと取得

$val_many = $request->all()

▼ユーザーの入力値をマルっと取得

$val_many = $request->input()

※「all()」と「input()」の違いは…未調査

▼キーを指定して取得

$val = $request->input(キー, キーが含まれないときの初期値)

▼配列入力(※詳細は未調査。ひとまずメモだけ)

$val = $request->input('products.0.name');
$val = $request->input('products.*.name');