ルーティングに直接関わるもの抜粋。
group()
とかprefix()
などは省いてます。
HTTPメソッドに対応したもの
Route::get($uri, $callback);
Route::post($uri, $callback);
Route::put($uri, $callback);
Route::patch($uri, $callback);
Route::delete($uri, $callback);
Route::options($uri, $callback);
使い方
Route::get('/path/to/route/{param}',function($param){
// return view('...'); などなど...
});
Route::get('/path/to/route/{param}',
'path\to\Controller@methodName');
リソースルート
php artisan make:controller ****Controller --resource
ってしたときに自動的に作られるメソッドに対応したルーティングをしてくれる。
Route::resource($uri, $controller, $options = []);
使い方
例としてこんなのを作るとこうなる
Route::resource('articles', 'ArticleController');
HTTPメソッド | URI | 対応するコントローラのメソッド |
---|---|---|
GET | /articles | index() |
GET | /articles/create | create() |
POST | /articles | store(Request $request) |
GET | /articles/{article} | show($id) |
GET | /articles/{article}/edit | edit($id) |
PUT/PATCH | /articles/{article} | update(Request $request, $id) |
DELETE | /articles/{article} | destroy($id) |
create()
、edit($id)
はモデルの新規作成・編集用のViewを返すためのメソッドとして用意されている。
オプションをいじる
Route::resource('articles', 'ArticleController', ['only' => ['index']]);
などとするとGETで/articles
以外にリクエストを送ると404が返る。
オプションで実装していないメソッドなどを明示しないとReflectionExceptionとかが出る。
他にもRoute::resource()->only([...])
とかでも指定できるみたいだけど、name()
付けたいときとかに困りがちなので配列で引数に与えるのがおすすめ。
APIルート
さっきのからcreate()
、edit($id)
がなくなった版。
php artisan make:controller ****Controller --api
に対応してます。
Route::apiResource($uri, $controller, $options = []);
Route::apiResources($array);
使い方
Route::apiResource('/articles', 'ArticleController');
Route::apiResource('/articles', 'ArticleController', ['only' => ['index', 'show']);
Route::apiResources([
'articles' => 'ArticleController',
'users' => 'UserController'
]);
Route::apiResources()
にオプションを効かすこともできる。
Route::apiResources(
[
'articles' => 'ArticleController',
'users' => 'UserController'
],
[
'only' => ['index','show']
]
);
こんな実装なので、配列に書いたコントローラすべてに同じオプションを効かすようです。
/**
* Register an array of API resource controllers.
*
* @param array $resources
* @param array $options
* @return void
*/
public function apiResources(array $resources, array $options = [])
{
foreach ($resources as $name => $controller) {
$this->apiResource($name, $controller, $options);
}
}