2015-07-13 6 views
8

В приложении laravel 5 я пытаюсь сделать маршрут для поддомена , не зная домена.Laravel 5 маршрутизация поддоменов в любом домене

Route::group(array('domain' => 'subdomain.domain.tld'), function() { 
    Route::get('/', '[email protected]'); 
}); 
Route::get('/', '[email protected]'); 

Этот вид маршрутизации работает, и я получаю getTest2(), называемый для субдомена и getTest1() для вызова без субдомена.

Теперь я хотел бы, чтобы это работало с подстановочным доменом, но без отправки параметров контроллеру, , поэтому приложение в dev enviroinment может быть в любом домене. (я также рассматривал возможность использования .env для хранения домена, но кажется, что слишком много хлопот для просто маршрутизации)

Я попытался

array('domain' => 'subdomain.{domain}.{tld}') 

Какие необходимы параметры по методам контроллера. и я попытался

array('domain' => 'subdomain.{domain?}.{tld?}') 

Который не требует параметров, но посылает их в любом случае, так что мои фактические параметры маршрута сдвигаются.

Я также видел http://laravel-tricks.com/tricks/dynamic-subdomain-routing, но мне не нравится идея обработки моих доменов в фильтрах.

Есть ли другой способ иметь подстановочный домен, который будет игнорироваться после обработки группы маршрутов?

+0

Я тоже очень заинтересован в этом. i мой бэкэнд laravel предоставляет api, и я настроил его так, чтобы api был доступен под api.domain и некоторыми другими вещами, такими как связанные с oauth вещи под разными подобластями. как я развиваю локально с homestead, и сервер, очевидно, будет в другом домене. Я надеюсь, что есть способ не жестко кодировать домен в моем приложении. –

+0

Пока я не найду лучшее решение, я добавил проверку вручную вручную непосредственно в файле маршрутов, используя что-то похожее на то, что пользовательский мазон ответил здесь: http: // stackoverflow.com/a/12372310/2099306 – YomY

ответ

0

проверить это может помочь ответить на ваш вопрос:

http://laravel.com/docs/5.1/routing#parameters-regular-expression-constraints

http://laravel.com/docs/5.1/routing#route-group-sub-domain-routing

+0

Я уже прочитал документацию. Регулярное выражение в параметрах повлияет на то, что считается параметром, но не изменит способ получения контроллеров. – YomY

4

Лучшим способом я нашел, чтобы сделать это, чтобы создать промежуточное программное обеспечение, которое удаляет определенные параметры из вашего маршрута. Например, в вашем случае:

class Subdomain { 
    public function handle($request, Closure $next) 
    { 
    $route = $request->route(); 
    $domain = $route->parameter('domain'); 
    $tld = $route->parameter('tld'); 

    //do something with your params 

    $route->forgetParameter('domain'); 
    $route->forgetParameter('tld'); 
    return $next($request); 
    } 
} 

//inside your Kernel.php, make sure to register the middleware 
protected $routeMiddleware = [ 
    'subdomain' => \App\Http\Middleware\Subdomain::class, 
]; 

Route::group(['middleware' => 'subdomain', 'domain' => 'subdomain.{domain}.{tld}'], function() { 
    Route::get('/', function() { 
    dd(func_get_args()); //no args, because it was removed in the middleware 
    }); 
}); 
+1

Интересный подход. Мне это нравится, и я могу использовать его для управления параметрами в маршруте. Однако это не решает проблему. Таким образом, функция маршрута для «/» все равно будет одинаковой для всех поддоменов. Идея заключалась в том, чтобы указать на разные функции, основанные на том, какой субдомен был вызван. x.sub.tld> function1, y.tld> function2. Благодарю вас за новую идею. – YomY

1

Точно так же вы знаете, что вы можете сделать

'domain' => '{subdomain}.{domain}.{tld}' 

и это будет маршрут a.domain.com и b.domain.com всем он же маршрутам/же контроллеров, и вы можете сделать свою логику внутри этого контроллера.

Я бы воспользовался промежуточным программным обеспечением, подобным вышеперечисленному, чтобы удалить домен и tld из запроса, иначе все модели должно выглядеть.

public function myMethod($subdomain, $domain, $tld, $id) 

Предполагая, что вашему маршруту нужен параметр $ id или любой другой маршрут.

Еще одна вещь, которая вас может заинтересует: Явная привязка формы формы.

Смежные вопросы