2019/08/06
URLとコントローラのアクションの対応ルール(ルート)を作成することをルーティングと言います。
Laravel5.2 では app/Http/route.php に記述します。
Laravel5.3 からは routes/web.php にルートを定義します。
route.php(web.php) では「このURLでアクセスされた時は、このコントローラのアクションを呼び出してください」と定義します。
現在のフレームワークではこのルーティングの機能が実装されており、laravel でも例外ではありません。
なので、フレームワークがはじめての人はまずはここを抑えましょう。「Hello Wold」を表示させることさえできません。
今回はこのルーティングについてのエントリーです。
記述方法
書式
ルーティングには Route ファサードを使います。
Route::get( $uri, $callback);
HTTPリクエストに対して定義できるメソッドの項目は以下になります。
// GETリクエストに対してのルーティング定義
// 通常のURL遷移やフォームのGETリクエストに対して用います
Route::get($uri, $callback);
// POSTリクエストに対してのルーティングを定義します。
// 主にフォームのPOSTリクエストに対して用います
Route::post($uri, $callback);
// putリクエストに対してのルーティングを定義
Route::put($uri, $callback);
// patchリクエストに対してのルーティングを定義
Route::patch($uri, $callback);
// deleteリクエストに対してのルーティングを定義
Route::delete($uri, $callback);
基本的に使用するのはGETとPOSTメソッドがほとんどです。
put / patch /delete / optonsメソッドに関しては REST API などを作成する時に使われます。
post() put() delete()メソッドを用いる際は、送信元からCSRFトークンフィールドを渡す必要があります。
「$callback」をクロージャーで記載
http://{ドメイン}/hello にアクセスすると「Hello World」と表示されます。
実践ではあまり使わない記述方法です。
Route::get('hello/', function()
{
return 'Hello World';
});
「$callback」をコントローラとメソッドで指定
通常はこちらの記述をします。
Route::get('hello/', 'helloController@goodmorning');
パラメータを取得
URLからコントローラ側へパラメータを渡したい時は以下のように記述します。
Route::get('hello/{name}', 'helloController@goodmorning');
:
class helloController extends Controller
{
public function goodmorning($name)
{
print_r('Good Morning! '.$name);
}
}
末尾にクエスチョンマーク「?」をつけるとパラメータが無くても許容されます。
Route::get('hello/{name?}', 'helloController@goodmorning');
URLの最初の文字列を一括で指定(prefix)
・http://{ドメイン}/user/top
・http://{ドメイン}/user/settings
・http://{ドメイン}/user/logout
上記のURLをprefixメソッドを使って一括指定します。
Route::prefix('user')->group(function(){
Route::get('top', 'UserController@top');
Route::get('settings', 'UserController@settings');
Route::get('logout', 'UserController@logout');
});
ミドルウェアの指定
あるルーティングに対して何らかのミドルウェアを適用させる場合は、以下になります。
Route::group(['middleware' => 'auth.admin'], function(){
Route::get('top', 'UserController@top');
Route::get('settings', 'UserController@settings');
Route::get('logout', 'UserController@logout');
});
prefix & ミドルウェアの指定
prefixとミドルウェアの両方を指定したい場合は、grout() 内に配列で指定してやります。
Route::group(['prefix' => 'user', 'middleware' => 'auth:admin'], function(){
Route::get('top', 'UserController@top');
Route::get('settings', 'UserController@settings');
Route::get('logout', 'UserController@logout');
});
パラメータをそのままBladeのファイル名に
例えば、
http://{ドメイン}/contents/sample
http://{ドメイン}/contents/test
http://{ドメイン}/contents/demo
にアクセスして
resources\views\contents\sample.blade.php
resources\views\contents\test.blade.php
resources\views\contents\demo.blade.php
を表示する場合
Route::get('/contents/{name1}', 'ContentsPagesController@page1');
コントローラには以下を記述します。
:
public function page1($name1){
return view('contents.'.$name1);
}
RESTfulなルーティング
ルーティングにRoute::resource
を指定することで、CRUDルーティングを一度に行うことができます。
Route::resource('users', 'UserController');
HTTPメソッド | URI | コントローラのメソッド | 用途 |
---|---|---|---|
GET | /users | index() | 一覧表示 |
GET | /users/create | create() | 追加ページ |
POST | /users | store() | 追加 |
GET | /users/{id} | show() | 該当データ表示 |
GET | /users/{id}/edit | edit() | 更新ページ |
PUT | /users/{id} | update() | 更新 |
DELETE | /users/{id} | destroy() | 削除 |
上記のコントローラとメソッドをartisanコマンドで自動生成してくれます。
$ php artisan make:controller UsersController --resource
生成されたスケルトンは以下になります。
{
public function index()
{
//
}
public function create()
{
//
}
public function store(Request $request)
{
//
}
public function show($id)
{
//
}
public function edit($id)
{
//
}
public function update(Request $request, $id)
{
//
}
public function destroy($id)
{
//
}
}
Laravelのルーティングに関しては以上です。
Laravelのルーティングについてもっと理解を深めたい方は PHPフレームワーク Laravel入門 をお勧めします。
ルーティング関連の掲載ページ
Chapter 2 ルーティングとコントローラ
2.1 ルーティング
2.2 コントローラの利用

仕事で Laravel を使っています。気づいたことや新しい発見など情報を発信していきます。問い合わせはこちら。