LoginSignup
5
5

More than 5 years have passed since last update.

ルーティングでワイルドカードを使うときの注意点

Posted at

Laravelのルーティングでは、サブドメインの設定も可能で、ワイルドカードでも指定できます。
Sub-Domain Routing

routes.php
// {account}がワイルドカード
Route::group(['domain' => '{account}.example.com'], function()
{
    Route::get('user/{id}', function($account, $id)
    {
        //
    });

    // 名前付きルート
    Route::get('/login', ['as' => 'login', 'uses' => 'HomeController@login']);
});

上記の設定で、「johndoe.example.com」などに対応できるわけです。

注意点

ところが、RedirectForm名前付きルートが使えないという困ったことになります。

Redirect::route('login');
// 文字通り、{account}.example.com/login にリダイレクトされる。

Form::open(['route' => 'login']);
// <form method="POST" action="http://{account}.example.com/login" ...

ワイルドカード指定が、そのまま出力されてしまい、「johndoe.example.com」なら
「johndoe.example.com/login」ではなく、「{account}.example.com/login」にリダイレクトされてしまうわけです。

対処方法

私が試した限りでは次の対処法があります。

Redirect::route()の第2引数にワイルドカードの値を設定する

毎回、第2引数にワイルドカードの値を指定します。

Redirect::route('login', ['account' => 'johndoe']);
// johndoe.example.com/login にリダイレクト

(結局...)名前付きルートを使わない

上記の方法では、Form::open()に対応できてません。

Redirect::to('/login');
Form::open(['url' => '/login']);

補足

ちなみに、Prefix Routingでワイルドカードを使ったときも同じ感じです。

他に解決方法ご存じのかた、ぜひ教えてください!

5
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
5