Laravelのヘルパーの関数は本当に便利なもので、日常よく使うものです。しかし、こんな使い方もあったのか、と知らない使い方を知って嬉しくなることあります。今回は私を嬉しくさせる、route()
のヘルパーの紹介です。
私はrouteに名前を付けるのが好きで、プログラムのrouteにはすべて名前がついています。それゆえに、route()
のヘルパーは欠かせないものです。
以下は、Laravel 7.xバージョンの新規プロジェクトを作成してユーザー認証もインストールしたプロジェクトのrouteです。
+----------+------------------------+------------------+------------------------------------------------------------------------+ | Method | URI | Name | Action | +----------+------------------------+------------------+------------------------------------------------------------------------+ | GET|HEAD | / | | Closure | | GET|HEAD | api/user | | Closure | | GET|HEAD | home | home | App\Http\Controllers\HomeController@index | | GET|HEAD | login | login | App\Http\Controllers\Auth\LoginController@showLoginForm | | POST | login | | App\Http\Controllers\Auth\LoginController@login | | POST | logout | logout | App\Http\Controllers\Auth\LoginController@logout | | GET|HEAD | password/confirm | password.confirm | App\Http\Controllers\Auth\ConfirmPasswordController@showConfirmForm | | POST | password/confirm | | App\Http\Controllers\Auth\ConfirmPasswordController@confirm | | POST | password/email | password.email | App\Http\Controllers\Auth\ForgotPasswordController@sendResetLinkEmail | | GET|HEAD | password/reset | password.request | App\Http\Controllers\Auth\ForgotPasswordController@showLinkRequestForm | | POST | password/reset | password.update | App\Http\Controllers\Auth\ResetPasswordController@reset | | GET|HEAD | password/reset/{token} | password.reset | App\Http\Controllers\Auth\ResetPasswordController@showResetForm | | GET|HEAD | register | register | App\Http\Controllers\Auth\RegisterController@showRegistrationForm | | POST | register | | App\Http\Controllers\Auth\RegisterController@register | +----------+------------------------+------------------+------------------------------------------------------------------------+
第3番目のNameの列がrouteの名前です。この値をもとにtinkerで、route()
を使っていろいろなurlを作成してみます。
まずは基本からで、route()
の最初の引数に、route名を渡します。
>>> route('home'); => "http://localhost/home"
作成されたurlの、http://localhostの部分は、.envのAPP_URLの定義から来ています。
.envにおいて、
... APP_URL=http://www.example.com ...
と定義すると、
>>> route('home'); => "http://www.example.com/home"
となります。
今度は、route()
に2番目の引数を与えます。
>>> route('password.reset', ['token' => '1232457890']); => "http://www.example.com/password/reset/1232457890"
このtokenは上のrouteの表のURIで password/reset/{token}と定義されているので、与えた値に置き換わります。
しかし、定義されていない変数も渡すこと可能です。
>>> route('password.reset', ['token' => '1232457890', 'type' => 'user']); => "http://www.example.com/password/reset/1232457890?type=user"
この値は、コントローラの引数の$requestを使って、$request->type
とかで取得できますね。
さらに、‘type’ => ‘user’の配列の形でなくても、単に、‘user’とかでも与えることできます。
>>> route('password.reset', ['token' => '1232457890', 'user']); => "http://www.example.com/password/reset/1232457890?user"
この場合は、コントローラ側では、$request->has('user')
とかでブーリアン値で取得できます。
今度は、route()
の第3の引数です。これはブーリアン値で、デフォルトがtrueでfalseを与えるとドメイン名がついた絶対URLではなくパス名だけを生成してくれます。
>>> route('home', null, false); => "/home"
最後に、redirect()
にもroute()
を使えます。
] ... return redirect(route('home'));
でもOKですが、
... return redirect()->route('home');
とチェーンできます。
メルマガ購読の申し込みはこちらから。