Skip to main content

はじめに

LaravelはアプリケーションのURLを生成するためのヘルパーをいくつか提供しています。 これらはテンプレートやAPIレスポンスでリンクを構築する際、またはアプリケーションの別の場所へリダイレクトレスポンスを生成する際に特に便利です。

基本的な使い方

URLの生成

url ヘルパーを使って任意のURLを生成できます。 生成されたURLは、アプリケーションが処理している現在のリクエストのスキーム(HTTPまたはHTTPS)とホストを自動的に使用します。
クエリ文字列パラメータを含むURLを生成するには query メソッドを使います。
パスにすでに存在するクエリ文字列パラメータを指定すると、既存の値が上書きされます。
配列の値もクエリパラメータとして渡せます。これらの値は適切にキー付けされ、生成されたURLにエンコードされます。

現在のURLの取得

url ヘルパーにパスを指定しない場合、Illuminate\Routing\UrlGenerator インスタンスが返され、現在のURLに関する情報にアクセスできます。
これらのメソッドは URL ファサードからもアクセスできます。

直前のURLの取得

ユーザーが訪問していた直前のURLを知りたい場合があります。url ヘルパーの previous メソッドや previousPath メソッドで取得できます。
セッション経由で直前のURLを取得することもできます。
直前に訪問したURLのルート名をセッション経由で取得することも可能です。

名前付きルートのURL

route ヘルパーは名前付きルートへのURLを生成するために使えます。 名前付きルートを使うと、ルートに定義された実際のURLに依存せずにURLを生成できます。 そのため、ルートのURLが変更されても、route 関数の呼び出しを変更する必要がありません。
このルートへのURLを生成するには次のようにします。
複数のパラメータを持つルートにも対応しています。
ルートの定義パラメータに対応しない追加の配列要素はURLのクエリ文字列に追加されます。

Eloquentモデル

Eloquentモデルのルートキー(通常は主キー)を使ってURLを生成することが多いでしょう。 そのためにEloquentモデルをパラメータ値として渡せます。route ヘルパーはモデルのルートキーを自動的に取り出します。

署名付きURL

Laravelでは名前付きルートへの「署名付き」URLを簡単に作成できます。 これらのURLにはクエリ文字列に「署名」ハッシュが付加され、URLが作成後に改ざんされていないことをLaravelが検証できます。 署名付きURLは、公開アクセス可能だがURL操作に対する保護が必要なルートに特に便利です。 たとえば、顧客にメールで送信する公開「登録解除」リンクを実装するために署名付きURLを使えます。 URL ファサードの signedRoute メソッドを使って署名付きURLを作成します。
signedRoute メソッドに absolute 引数を指定することで、署名URLハッシュからドメインを除外できます。
指定した時間後に有効期限が切れる一時的な署名付きURLを生成するには temporarySignedRoute メソッドを使います。 Laravelは一時的な署名付きURLを検証する際、署名付きURLにエンコードされた有効期限タイムスタンプが経過していないことを確認します。

署名付きURLの検証フロー

署名付きルートリクエストの検証

受信リクエストに有効な署名があることを確認するには、Illuminate\Http\Request インスタンスの hasValidSignature メソッドを呼び出します。
特定のクエリパラメータを検証時に無視したい場合は hasValidSignatureWhileIgnoring メソッドを使います。
受信リクエストインスタンスを使う代わりに、signedIlluminate\Routing\Middleware\ValidateSignatureミドルウェアをルートに割り当てることもできます。 受信リクエストに有効な署名がない場合、ミドルウェアは自動的に 403 HTTPレスポンスを返します。
署名付きURLにドメインが含まれない場合は relative 引数をミドルウェアに指定します。

無効な署名付きルートへの応答

有効期限切れの署名付きURLにアクセスすると、403 HTTPステータスコードの汎用エラーページが表示されます。 アプリケーションの bootstrap/app.php ファイルで InvalidSignatureException 例外のカスタム「render」クロージャを定義することで、この動作をカスタマイズできます。

コントローラーアクションのURL

action 関数は指定されたコントローラーアクションのURLを生成します。
コントローラーメソッドがルートパラメータを受け取る場合は、関数の第2引数にルートパラメータの連想配列を渡します。

フルエントURIオブジェクト

LaravelのURIクラスは、オブジェクトを通じてURIを作成・操作するための便利なフルエントインターフェースを提供します。
URIインスタンスを取得したら、フルエントに変更できます。

デフォルトのURLパラメータ

特定のURLパラメータにリクエスト全体のデフォルト値を指定したい場合があります。 たとえば、多くのルートに {locale} パラメータが定義されているとします。
route ヘルパーを呼び出すたびに locale を渡すのは面倒です。 そこで URL::defaults メソッドを使って、現在のリクエスト中に常に適用されるこのパラメータのデフォルト値を定義できます。 このメソッドはルートミドルウェアから呼び出すと、現在のリクエストにアクセスできます。
locale パラメータのデフォルト値が設定されると、route ヘルパーでURLを生成する際にその値を渡す必要がなくなります。
URLデフォルト値の設定はLaravelの暗黙的なモデルバインディングの処理を妨げる場合があります。 URLデフォルト値を設定するミドルウェアをLaravel自身の SubstituteBindings ミドルウェアより前に実行されるようミドルウェアの優先度設定を行ってください。 アプリケーションの bootstrap/app.php ファイルで priority ミドルウェアメソッドを使って設定できます。
最終更新日 2026年7月20日