2020/08/12
URLとコントローラのアクションの対応ルール(ルート)を作成することをルーティングと言います。
Laravel5.2 では app/Http/route.php に記述します。
Laravel5.3 からは routes/web.php にルートを定義します。
route.php(web.php) では「このURLでアクセスされた時は、このコントローラのアクションを呼び出してください」と定義します。
現在のフレームワークではこのルーティングの機能が実装されており、laravel でも例外ではありません。
なので、フレームワークがはじめての人はまずはここを抑えましょう。「Hello Wold」を表示させることさえできません。
今回はこのルーティングについてのエントリーです。
INDEX
書式(基本)
ルーティングには 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トークンフィールドを渡す必要があります。
URLからパラメータを渡す方法
大きく分けてルートパラメータとクエリ文字列があります。
ルートパラメータ
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');
クエリ文字列
例えば、http://loclhost/search?pref=kyoto
などでアクセス時に値を渡す方法です。
まず、ルーティングの記述ですが、クエリ文字列を利用する時はルーティングには特別な記述はいりません
Route::get('/','UserController@index);
コントローラでURLに記述したクエリ文字列を取得します。
public function index(Request $request)
{
// $dataには kyoto が代入される
$data = $request->pref;
return view('user.index', $data);
}
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のルーティングに関しては以上です。
PHPフレームワーク Laravel入門 第2版
僕がはじめてLaravelを学習するために参考にしたサイトは、掌田津耶乃(しょうだつやの)さんの libro というサイトです。当時(2016年)、Laravel学習サイトの中でもこのサイトは群を抜いてわかりやすく説明されていたので、とても勉強になったのを覚えています。この本は掌田津耶乃さんが書いた本なので、わかりやすく解説されているだろうと kindle で購入しました。2020年8月の時点でいうと日本国内にて唯一の Laravel の良書と言っても良いかと思います。口コミでもLaravel本のロングセラー定番解説書として認知されています。当サイトではチュートリアル形式でLaravelを解説しているので、初心者の方はこの本とセットで学習されるといいと思います。しかし、かなりわかりやすく解説されているとはいえ、PHP中級者以上のスキルは必要です。PHP自体の知識が乏しい方は 独習PHP 第3版 をあわせて購入することをお勧めします。
仕事で Laravel を使っています。気づいたことや新しい発見など情報を発信していきます。問い合わせはこちら。