Edited at

Laravelのルーティングチートシート

More than 1 year has passed since last update.


環境


  • Laravel5.1で動くものを前提としています。

  • ただ、5.2以降に関しても補足を入れています。


前提


  • Laravelのルーティングの基本がわかってること。

  • ルーティングの設定は先に書かれたやつのほうが優先度が高い

  • グループはネストできる


基本1

Route::get('/', function() { return 'Hello, World!' });

// URL出力
url('/');


基本2(Laravel5.5で追加)

Route::view('/', 'home'); // viewを直指定するやつ

Route::view('/', 'home', ["foo" => "bar"]); // パラメータも渡せる


基本3

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

Route::post('/', 'HomeController@post');
Route::put('/', 'HomeController@put');
Route::delete('/', 'HomeController@destroy');
// URL出力
action('HomeController@index');


基本使わないけど

Route::match(['get', 'post'], 'foo','HomeController@index'); // GET,POST両方ここに通す

Route::any('bar', function(){}); // 全てのHTTPメソッドに適用


リダイレクト(Laravel5.5から)

Route::redirect('/about_us', '/about'); // /about_usに来たら/aboutに飛ばす。第3引数にHTTPステータスコードを指定可能


別名付ける

Route::get('/', ['uses' => 'HomeController@index', 'as' => 'home']);

Route::get('/', 'HomeController@index')->name('home');
// URL出力
route('home');


URLパラメータ

// idパラメータが無かったらエラー

Route::get('user/{id}', function($id) { return view('user.index', ['user' => User::find($id)]); });

// nameパラメータが含まれてなくても通す
Route::get('foo/{name?}', 'FooController@index');

// whereでパラメータを正規表現バリデーション出来る
Route::get('foo/{name?}', 'FooController@index')->where('name', '[A-Za-z]+');

// グローバル適用されるパラメータの正規表現バリデーション
// (RouteServiceProviderのbootメソッドに追加(parentより前))
$router->pattern('id', '[0-9]+');
// Route::whenはあまり推奨されてない模様→5.2で削除された模様


controllerルーティング

※5.2で非推奨。5.3で削除されました。

Route::controller('users', 'UserController');

// getIndexとかpostIndexとかControllerで設定すればアクセスできるようになる

// asを付けたい場合
Route::controller('users', 'UserController', [
'getIndex' => 'users.index'
]);


resourceルーティング

Route::resource('photos', 'PhotoController');

// [GET](/photos) ->index
// [GET](/photos/{id}) ->show($id)
// [GET](/photos/create) ->create
// [POST](/photos) ->store
// [GET](/photos/{id}) ->edit($id)
// [PUT/PATCH](/photos/{id})->update($id)
// [DELETE](/photos/{id}) ->destroy($id)

// ネストも出来る
Route::resource('photos.comments', 'PhotoCommentController');
// URLはこんな感じになる( photos/{photoId}/comments/{commentId} )

// only,except
Route::resource('photos', 'PhotoController', [
'only' => ['index', 'show']
]);

// 5.4からはapi向けのresourceルーティングメソッドが追加
Route::apiResource('photos', 'PhotoController');
// resourceメソッドのcreate,editを省いただけのやつです


group

// ネスト出来る&複数指定可能

Route::group([パラメータ => パラメータ値], function(){

});
// パラメータ一覧
// middleware ... ミドルウェア適用
// namespace ... 名前空間適用(Adminなら'App\Http\Controllers\Admin'以下)
// domain ... サブドメイン適用({account}.myapp.com)
// prefix ... プレフィックス付与(adminとかuser/{user_id}とか)

// なお5.4あたりからチェーンメソッドとして記述も出来るようになりました(Fluent Routing)
// 以前まではgetやpostを書いた後のチェーンはできてたがgroupの部分は最近から
// Route::prefix('admin')
// ->middleware('admin')
// ->get(...


モデルとの結合

// RouteServiceProviderのbootメソッドに追加(parentより後)

// この追加は5.2なら不要。自動でインジェクションされるみたい
$router->model('user', 'App\Models\User');

// ルーティング(find({user})した結果が$userに入るたぶん)
Route::get('/users/{user}', function(App\Models\User $user) {

});

// なお、router->modelじゃなくてbindなら独自設定も可能(つまりキャッシュとかも出来るはず)
$router->bind('user', function($value) {
return App\Models\User::where('name', $value)->first();
});