Laravel:可选路由前缀参数

时间:2017-08-01 10:17:28

标签: php laravel laravel-5 parameters routing

我目前正在开发一个多站点应用程序(多个(子)站点的一个代码库),我很乐意利用路由缓存,但目前我正在硬编码前缀而不是动态确定它。

当我尝试这样做时,我遇到了一个问题,我已经在下面说明了这个问题:

Route::group(['prefix' => '{subsite}', 'subdomain' => '{site}.domain.tld'], function () {
    Route::get('blog', 'BlogController@index')->name('blog.index');
});

访问像http://sitename.domain.tld/subsitename/blog这样的子网站时,这一切都运行良好,但在不访问像http://sitename.domain.tld/blog这样的子网站时它不再起作用,因为它现在会认为前缀是“博客”。

有没有办法让'subsite'参数为空或跳过?

谢谢!

1 个答案:

答案 0 :(得分:2)

据我所知,目前的路由系统中没有任何内容可以让您解决单个路由组的问题。

虽然这不能回答您的具体问题,但我可以想出两种可以实现预期行为的方法。

1。复制路由组

Route::group(['subdomain' => '{site}.domain.tld'], function () {
    Route::get('blog', 'BlogController@index')->name('blog.index');
});

Route::group(['prefix' => '{subsite}', 'subdomain' => '{site}.domain.tld'], function () {
    Route::get('blog', 'BlogController@index')->name('blog.index');
});

2。循环遍历一系列预期的前缀。

$prefixes = ['', 'subsiteone', 'subsitetwo'];

foreach($prefixes as $prefix) {
    Route::group(['prefix' => $prefix, 'subdomain' => '{site}.domain.tld'], function () {
        Route::get('blog', 'BlogController@index')->name('blog.index');
    });
}