首页 文章

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

提问于
浏览
1

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

在我的主模板中,使用辅助函数 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 将触发DashboardController中的 getIndex() ,而访问 project.app 将触发HomeController中的 index() .

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

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

<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,因为我的DashboardController中没有getProducts()方法 . 这是错误的链接!

得到我在说什么?

1 回答

  • 1

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

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

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

相关问题