【问题标题】:Laravel: Optional route prefix parameterLaravel:可选的路由前缀参数
【发布时间】:2018-01-08 03:52:15
【问题描述】:

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

在尝试执行此操作时,我遇到了如下所示的问题:

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 这样的子站点时,它不再工作了,因为它现在会认为前缀是“博客”。

有什么办法可以让“子站点”参数为空或跳过?

谢谢!

【问题讨论】:

  • Laravel 确实有可选参数,但这些只能用作列表中的最后一个参数,我认为你最好的选择是将所有需要可选子站点的路由包装在一个函数中并创建 2路由组,一个有子站点,一个没有

标签: php laravel laravel-5 parameters routing


【解决方案1】:

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

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

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');
    });
}

【讨论】:

  • 感谢您的回复,Jeemusu!这些方法的问题是命名的路由会相互覆盖,所以转到route('blog.index') 总是会链接到最后定义的路由。不幸的是,第二种方法不适用于路由缓存:(
  • 啊,我的错!需要将名称更改为每个前缀的唯一名称。
猜你喜欢
  • 2017-03-13
  • 2019-07-06
  • 1970-01-01
  • 2019-04-30
  • 2015-02-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多