Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/laravel/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Laravel,不同子域上的同一路径使用了错误的控制器 问题:_Php_Laravel_Laravel 5_Url Routing - Fatal编程技术网

Php Laravel,不同子域上的同一路径使用了错误的控制器 问题:

Php Laravel,不同子域上的同一路径使用了错误的控制器 问题:,php,laravel,laravel-5,url-routing,Php,Laravel,Laravel 5,Url Routing,如何设置Laravel布线,以便: 导航到mysite.com/login使用LoginController 导航到somecompany.mysite.com/login使用TenantLoginController 我在做什么 我想要一个Laravel5.7应用程序,它有一个典型的登录页面,比如说,mysite.com/login 我想为这个应用程序设置一个子域,比如somecompany.mysite.com,它将拥有自己的身份验证 我希望somecompany用户登录somecomp

如何设置Laravel布线,以便:

  • 导航到mysite.com/login使用
    LoginController
  • 导航到
    somecompany.mysite.com/login
    使用
    TenantLoginController
我在做什么 我想要一个Laravel5.7应用程序,它有一个典型的登录页面,比如说,
mysite.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
显示主登录表单。

因为您没有在第一个路由中指定域(由
LoginController
处理),它也应该对
somecompany.mysite.com
子域有效

为了解决这个问题,我建议尝试为第一条路由添加更多的特殊性,用
route::domain('mysite.com')
将其括起来


Laravel路由器始终采用第一条匹配的路由,并且第一条路由最终匹配得很好。

只是一个偶然的机会,但由于您没有在第一条路由中指定域(由
LoginController处理)
),它也应该对
somecompany.mysite.com
子域有效。因此,我建议尝试为第一条路由添加更多的特殊性,用
route::domain('mysite.com')将其括起来
?Laravel路由器总是选择第一条匹配的路由,并且第一条路由最终匹配得很好。@LupinityLabs你我的朋友是100%对的!如果我在域调用中包装主路由,一切都会正常工作。给出答案,我会接受。谢谢你的帮助!很高兴我能提供帮助!完成,谢谢:-)您可以更改管线定义的顺序。首先放置特定的域路由,然后放置常规路由。Laravel使用最后加载的路由,而不是第一个匹配的路由。如果您有多条相同的路由,则会触发上次加载/注册的路由。就像css类一样。