Laravelのルーティング

Laravel8のルーティングについてです。
ルーティングはroutes/web.phpに記述します。

ルート / にアクセスしたときにTestControllerのindex関数を呼び出したい場合は以下のように書きます。

Route::get('/', 'TestController@index');

/create にpostしたときにcreate関数を呼び出したい場合は以下のように書きます。

Route::post('/create', 'TestController@create');

URLにパラメータを含みたい場合、例えば /edit/1 や /edit/2 のように対象のIDをURLにしたい場合は以下のように{ }を使用して書くことができます。

Route::get('/edit/{id}', 'TestController@edit');

Controllerのほうで以下のように引数として定義することで値を取得できます。

public function edit($id) {
    /* editの処理 */
}

また、idは数値のみ、やアルファベットのみといった条件の指定もできます。
whereを使用してパラメータ名と正規表現の辞書を渡します。
例えばidは4桁の数値のみという場合は以下のように書くことができます。

Route::get('/edit/{id}', 'TestController@edit')->where(['id' => '^[0-9]{4}$']);

ほかにもアクセス時の可否判定などを行いたい場合はmiddlewareを使用できます。
authというmiddlewareを使用したい場合は以下のように書きます。

Route::get('/', 'TestController@index')->middleware('auth');

また、複数のルートで同じmiddlewareを使用したい場合はまとめて書くこともできます。

Route::middleware('auth')->group(function() {
    Route::get('/', 'TestController@index');
    Route::post('/create', 'TestController@create');
    Route::get('/edit/{id}', 'TestController@edit')->where(['id' => '^[0-9]{4}$']);
});

ルートには名前を付けることもできます。
名前をつけるとリダイレクトの際にURLでなく名前で指定することもできます。

Route::get('/', 'TestController@index')->name('test.index');

このあたりができればとりあえずは困らなさそうです。

スポンサーリンク