このリポジトリはPHP Webアプリフレームワークである、LaravelのLTSバージョンである5.5の公式英文ドキュメントを日本語へ翻訳しています。
This project is maintained by okinaka
Laravelはアプリケーションに対するURL生成の手助けとなる、数多くのヘルパを提供しています。これは主にテンプレートやAPIレスポンスでリンクを構築するためにはもちろんのこと、リダイレクトレスポンスの生成や、アプリケーションの他の部分でも役立ちます。
urlヘルパは、アプリケーションに対する任意のURLを使用するために使用されます。生成されるURLには自動的に、現在のリクエストのスキーム(HTTP/HTTPS)とホストが使用されます。
$post = App\Post::find(1);
echo url("/posts/{$post->id}");
// http://example.com/posts/1
urlヘルパにパスを指定しないと、Illuminate\Routing\UrlGeneratorインスタンスが返され、現在のURLに関する情報へアクセスできます。
// クエリ文字列を除いた現在のURL
echo url()->current();
// クエリ文字列を含んだ現在のURL
echo url()->full();
// 直前のリクエストの完全なURL
echo url()->previous();
こうしたメソッドには、URLファサードを使用してもアクセスできます。
use Illuminate\Support\Facades\URL;
echo URL::current();
routeヘルパは、名前付きルートへのURLを生成するために使用します。名前付きルートにより、定義したルートの実際のURLを指定せずとも、URLを生成することができます。ですから、ルートのURLを変更しても、route関数の呼び出しを変更する必要はありません。例として以下のように、アプリケーションが次のルートを持っていると想像してください。
Route::get('/post/{post}', function () {
//
})->name('post.show');
このルートへのURLを生成するには、次のようにrouteヘルパを使用します。
echo route('post.show', ['post' => 1]);
// http://example.com/post/1
Eloquentモデルの主キーを使用するURLを生成することもよくあると思います。そのため、Eloquentモデルをパラメータ値として渡すことができます。routeヘルパは、そのモデルの主キーを自動的に取り出します。
echo route('post.show', ['post' => $post]);
action関数は、指定するコントローラアクションに対するURLを生成します。コントローラの完全な名前空間を渡す必要はありません。代わりに、App\Http\Controllers名前空間からの相対的なコントローラクラス名を指定してください。
$url = action('HomeController@index');
コントローラメソッドが、ルートパラメータを受け取る場合、この関数の第2引数として渡すことができます。
$url = action('UserController@profile', ['id' => 1]);
アプリケーションにより、特定のURLパラメータのデフォルト値をリクエスト全体で指定したい場合もあります。たとえば、多くのルートで{locale}パラメータを定義していると想像してください。
Route::get('/{locale}/posts', function () {
//
})->name('post.index');
毎回routeヘルパを呼び出すごとに、localeをいつも指定するのは厄介です。そのため、現在のリクエストの間、常に適用されるこのパラメートのデフォルト値は、URL::defaultsメソッドを使用し定義できます。現在のリクエストでアクセスできるように、ルートミドルウェアから、このメソッドを呼び出したいかと思います。
<?php
namespace App\Http\Middleware;
use Closure;
use Illuminate\Support\Facades\URL;
class SetDefaultLocaleForUrls
{
public function handle($request, Closure $next)
{
URL::defaults(['locale' => $request->user()->locale]);
return $next($request);
}
}
一度localeパラメータに対するデフォルト値をセットしたら、routeヘルパを使いURLを生成する時に、値を渡す必要はもうありません。