はじめに
この記事はプログラミング初学者による備忘録用の記事であり、また、少しでも他の初学者のお役に立てればと思い書いています。
今回は、Laravel6.x ルーティング
に関して再度インプットを行いましたので、初見及び忘れそうな知識について記録しておきたいと思います。
※知識が増え次第、随時更新
間違いなどがございましたら、ご指摘のほどよろしくお願い致します。
目次
・グローバル制約
・フォールバックルート
・名前付きルートへのURLを生成
・擬似フォームメソッド
グローバル制約
グローバル制約とは
正規表現でルートパラメータを制約したい場合は、RouteServiceProviderのbootメソッドの中で、patternメソッドを使いパターンを定義する。
使い方
正規表現をルート定義したルートパラメータに適応させたい場合にapp/Providers/RouteServiceProvider.phpのbootメソッド
内で設定を行うようにする。
例
/**
* ルートモデル結合、パターンフィルタなどの定義
*
* @return void
*/
public function boot()
{
Route::pattern('id', '[0-9]+'); //追記する
//このように指定することでパラメータ名を使用している全ルートで自動的に提供される
parent::boot();
}
//略
Route::get('user/{id}', function ($id) {
// {id}が数値の場合のみ実行されるようになる
});
補足
ルーティングに直接バリデーションをつけることも可能
Route::get('foo/{id?}', 'FooController@index')->where('id', '[0-9]+');
フォールバックルート
フォールバックルートとは
受け取ったリクエストが設定したRouteと一致しない場合に適用されるルーティングのこと
使い方
基本的に処理できないリクエストに対しては自動的に"404"ページが表示されるが、routes/web.phpファイルにフォールバックルートが定義されていれば、webミドルウェアグループの中のすべてのミドルウェアで、フォールバックルートが適用されカスタマイズした特定のページ表示をすることができる。
例
//この記述を入れたい場合はルート登録で一番最後に記述する
Route::fallback(function () {
//
});
名前付きルートへのURLを生成する(パラメータ定義)
名前付きルートの生成とは
名前付きルートは特定のルートへのURLを生成したり、リダイレクトしたりする場合にメリットが生まれる。ルート定義にnameメソッドをチェーンすることで、そのルートに対して名前をつけることができる。
ルートに一度名前を付ければ、その名前をグローバルなroute関数で使用すれば、URLを生成したり、リダイレクトすることが可能になる。
使い方
ルートでパラメータを定義している場合は、route関数の第2引数としてパラメータを渡すことで、指定されたパラメーターが自動的にURLの正しい場所へ埋め込まれる。
例
//名前付きルートにする
Route::get('sample/test', function () {
//
})->name('test');
// URLの生成
$url = route('test');
// リダイレクトの生成
return redirect()->route('test');
//view表示ルートの指定
return view(route('test'));
//パラメータ有り名前付きルートにする
Route::get('sample/{id}/test', function ($id) {
//
})->name('test');
//URLの生成(route関数の第2引数としてパラメーターを指定する)
$url = route('test', ['id' => 1]);
//配列に新たなパラメータを追記した場合、その[キー => バリュー]は自動的にクエリ文字列として生成されるURLへ追加される。
$url = route('test', ['id' => 1, 'name' => 'hal']);
擬似フォームメソッド
擬似フォームメソッドとは
HTMLフォームはPUT、PATCH、DELETEアクションをサポートしていない。
従って、、HTMLフォーム上でPUT、PATCH、DELETEルートを定義する時、擬似フォームメソッドと呼ばれるものを使う必要がある。
使い方
フォームに_method隠しフィールドを追加する必要がある。
_methodフィールドとして送られた値は、HTTPリクエストメソッドとして使用される。
_methodフィールドを生成するために、@method
Bladeディレクティブを使用することもある。
例
//@method Bladeディレクティブの使用例
<form action="{{ route('sample.destroy', compact('sample')) }}" method="POST">
@method('DELETE')
@csrf
</form>
//formタグではmethod=POSTを指定、タグ内では@method()でアクションを指定する