#Laravel5.5でのルーティング方法一覧
ベーシック
Route::get('/user', 'UsersController@index');
Route::post('/user', 'UsersController@index');
Route::put('/user', 'UsersController@index');
Route::patch('/user', 'UsersController@index');
Route::delete('/user', 'UsersController@index');
Route::options('/user', 'UsersController@index');
GETもPOSTも対応(複数対応)
Route::match(['get', 'post'], '/user', function () {
'UsersController@index'
});
全HTTP動詞に対応する
Route::any('/user', function () {
'UsersController@index'
});
リダイレクト
Route::redirect('/user', '/there', 301);
ルートからビューを返すだけの場合
最初の引数にURIを取り、ビュー名は第2引数
Route::view('/user', 'user');
#配列も渡す
Route::view('/user', 'user', ['name' => 'Taylor']);
必須パラメータ
#URLからユーザーIDを取り出したい場合
Route::get('user/{id}', function ($id) {
return 'User '.$id;
});
任意パラメータ
パラメータ名の後に?を付けると、任意指定のパラメータになります。対応するルートの引数に、デフォルト値を必ず付けてください。
Route::get('user/{name?}', function ($name = null) {
return $name;
});
Route::get('user/{name?}', function ($name = 'John') {
return $name;
});
正規表現制約
whereメソッドを使って、ルートパラメータのフォーマットを制約できます。
Route::get('user/{name}', function ($name) {
//
})->where('name', '[A-Za-z]+');
Route::get('user/{id}', function ($id) {
//
})->where('id', '[0-9]+');
Route::get('user/{id}/{name}', function ($id, $name) {
//
})->where(['id' => '[0-9]+', 'name' => '[a-z]+']);
グローバル制約
指定した正規表現でいつもルートパラメータを制約したい場合は、patternメソッドを使ってください。
/**
* ルートモデル結合、パターンフィルタなどの定義
*
* @return void
*/
public function boot()
{
Route::pattern('id', '[0-9]+');
parent::boot();
}
名前付きルート
ルート定義にnameメソッドをチェーンすることで、そのルートに名前がつけられます。
Route::get('user/profile', 'UserController@showProfile')->name('profile');
ミドルウェア
Route::middleware(['first', 'second'])->group(function () {
Route::get('/', function () {
// firstとsecondミドルウェアを使用
});
Route::get('user/profile', function () {
// firstとsecondミドルウェアを使用
});
});
ルートプレフィックス
グループ内の全ルートのURIにadminを付けたければ、次のように指定します。
Route::prefix('admin')->group(function () {
Route::get('users', function () {
// Matches The "/admin/users" URL
});
});
現在のルートへのアクセス
$route = Route::current();
$name = Route::currentRouteName();
$action = Route::currentRouteAction();