Laravel-所有路由链接都以子域为前缀


Laravel - All route links are prefixed with sub-domain

我正在使用应用程序中的子域作为用户帐户的仪表板。在仪表板的视图中,我包含一个主模板,其中包含导航中指向网站根目录的链接。当我访问子域时,我注意到导航中的所有链接都根据子域名进行了更改。

在我的主模板中,链接是使用辅助函数 route() 生成的。在我的子域上查看生成的链接时,该链接与所有其他链接一起从 domain.com/about 更改为 sub.domain.com/about

Route::group(['domain' => 'dashboard.project.app', 'before' => 'auth'], function() 
{
    Route::controller('/', 'DashboardController');
});
Route::get('/', ['as' => 'home', 'uses' => 'HomeController@index']);
Route::resource('products', 'ProductsController');
Route::resource('support', 'SupportController');

因此,访问 dashboard.project.app 会在仪表板控制器中触发getIndex(),而访问 project.app 则会在HomeController中触发index()。

太好了,我们已经走到了这一步。现在,我有一个简单的视图用作模板,其中包含指向在子域外部定义的命名资源路由的 URL。

同样,URL 是使用辅助函数 route() 创建的。在由仪表板控制器中调用的视图扩展的模板中,我将在导航中有一个链接,例如:

<a href="{{ route('products.index') }}">Products</a>

这将根据需要生成<a href="http://project.app/products">Products</a>,但是当显示在子域下的视图中时,<a href="http://dashboard.project.app/products">Products</a>会发生变化。

所以我希望所需的输出始终 project.app/products 并且永远不会 dashboard.project.app/products 因为访问该链接将导致 404,因为我的仪表板控制器中没有 getProducts() 方法。这是错误的链接!

明白我在说什么吗?

如果命名路由未定义为特定于域,则 url 生成器将使用您当前所在的任何域。如果路由应特定于域,请指定它:

Route::group(['domain' => 'project.app'], function() {
    Route::resource('products', 'ProductsController');
    Route::resource('support', 'SupportController');
});

现在,即使从您的仪表板上,route('products.index')也应该为您提供 project.app/products .