使用多域路由时,Laravel将域添加到命名路由之前

时间:2020-10-25 19:17:37

标签: php laravel

由于声誉原因我无法对this other question进行评论,因此我再次提出要求。

就像OP发布的一样,Laravel的web.php文件中的路由如下:

$loginRoutes = function () {

   Route::get('/', 'HomeController@index')->name('home');

};

Route::domain('domain1.com')->group($loginRoutes);
Route::domain('domain2.com')->group($loginRoutes);
Route::domain('localhost')->group($loginRoutes);

在刀片中调用命名的路由时,例如使用route('home'),将上面代码最后一行中的域放在链接之前。

因此,如果我们位于domain1.com上,并且刀片中的链接引用route('home'),则该URL将以http:// localhost作为域。

如何避免不对URL进行硬编码就避免这种情况?

更新我已经将两种方法结合在一起(作为对可能在此发生的其他人的答案发布),但我希望有人可以为解决该问题的更好方法提供一些清晰度。

3 个答案:

答案 0 :(得分:1)

这是我现在要尝试解决的方法。这不是很优雅,但是早期测试似乎可行。

这是web.php文件的结构

$LARAVEL_HTTP_HOST = explode(':',$_SERVER['HTTP_HOST'])[0];

$loginRoutes = function () {

   Route::get('/', 'HomeController@index')->name('home');

};

if ($LARAVEL_HTTP_HOST == 'domain1.com') {

  Route::domain('domain1.com')->group($loginRoutes);

}
elseif ($LARAVEL_HTTP_HOST == 'domain2.com') {

  Route::domain('domain2.com')->group($loginRoutes);

}
elseif ($LARAVEL_HTTP_HOST == 'localhost') {

  Route::domain('localhost')->group($loginRoutes);

}
else
{

  // Some catch all routing here

}

答案 1 :(得分:1)

下面的另一个答案仅是使用条件句。这似乎解决了命名路由的URL。

$LARAVEL_HTTP_HOST = explode(':',$_SERVER['HTTP_HOST'])[0];

if (in_array($LARAVEL_HTTP_HOST,array('domain1.com','domain2.com','localhost')))
{

  // Routes Here

}

答案 2 :(得分:1)

好的,在这里发布第三个选项。

同样,我在这里向可能遇到该帖子的任何人发布此选项。我仍在寻找一种可行且更优雅的解决方案。

$LARAVEL_HTTP_HOST = explode(':',$_SERVER['HTTP_HOST'])[0];

$loginRoutes = function () {

   Route::get('/', 'HomeController@index')->name('home');

};

$allowedDomains = array(
    'domain1.com',
    'domain2.com',
    'localhost',
);

if (in_array($LARAVEL_HTTP_HOST,$allowedDomains))
{
    Route::group(['domain' => $LARAVEL_HTTP_HOST], $loginRoutes);
}