由于声誉原因我无法对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进行硬编码就避免这种情况?
更新我已经将两种方法结合在一起(作为对可能在此发生的其他人的答案发布),但我希望有人可以为解决该问题的更好方法提供一些清晰度。
答案 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);
}