Laravel, тот же путь на другом поддомене использует неправильный контроллер - PullRequest
1 голос
/ 31 марта 2019

Вопрос

Как настроить маршрутизацию Laravel так, чтобы:

  • при переходе на mysite.com/login используется LoginController
  • при переходе на somecompany.mysite.com/login используется TenantLoginController

Что я делаю

У меня будет приложение Laravel 5.7 с типичной страницей входа, скажем, mystite.com/login

Я хотел бы настроить поддомен для этого приложения, например somecompany.mysite.com, который будет иметь собственную аутентификацию.

Я бы хотел, чтобы пользователи somecompany вошли в систему somecompany.mysite.com/login


Что я пробовал

Определение маршрута для входа на основной сайт

Route::group(['namespace' => 'App\Http\Controllers\Auth', 'middleware' => ['web']], function () {
    Route::get('login',   'LoginController@showLoginForm')->name('login');
});

Определение маршрута для входа в поддомен

Route::domain('somecompany.mysite.com')->group(function ($router) {
    $router->group(['namespace' => 'App\Http\Controllers\Tenant\Auth', 'middleware' => ['web']], function($router) {
        $router->get('login',   'TenantLoginController@showLoginForm')->name('somecompany.login');
    });
});

Что случилось

Я могу перейти к somecompany.mysite.com/login, и на строке URL-адреса появляется сообщение somecompany.mysite.com/login, но когда я это делаю, запрос фактически перенаправляется на контроллер 'LoginController@showLoginForm', а не ожидаемый 'TenantLoginController@showLoginForm', и типичная форма входа отображается, а не Форма входа в поддомен.

Если я изменю путь на $router->get('tenant-login' и перейду к somecompany.mysite.com/tenant-login, отобразится форма входа в поддомен, а somecompany.mysite.com/login отобразит основную форму входа.

1 Ответ

2 голосов
/ 31 марта 2019

Поскольку вы не указали домен в первом маршруте (обрабатывается LoginController), он также должен быть действительным для субдомена somecompany.mysite.com.

Чтобы обойти это, я бы предложил добавить больше специфичности к этому первому маршруту, заключив его в Route::domain('mysite.com').

Маршрутизатор Laravel всегда выбирает первый соответствующий маршрут, и этот первыйв конце одно совпадение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...