【问题标题】:Laravel, restricting route parameter to table column valuesLaravel,将路由参数限制为表列值
【发布时间】:2021-04-03 09:17:51
【问题描述】:

同一类型的路由有两条

Route::get('/{category_slug}/{city_slug}/{state_slug}', 'PagesController@categoryByStateCity')->name('page.category.state.city');
Route::get('/{item_slug}/{city_slug}/{state_slug}', 'PagesController@item')->name('page.item');

category_slug - 类别参数 item_slug - 公司参数

他们有相同的结构,所以这个网址

/demo-company/城市/州

将由第一条路由作为类别处理

在构建路由时,是否有一种优雅的解决方案可以将这些参数中的每一个都限制为它们自己的值?

PS

->where('option1|option2|option3...)

该选项不合适,因为可能有5000个值并且得到一个长字符串。

PS2 或许有机会使用中间件

请注意,我不想使用控制器来检查参数。我想有不同的路线,并在路线级别进行。

【问题讨论】:

  • 那么,基本上你需要将category_slug 限制为Category 表中的slug

标签: laravel routes laravel-routing


【解决方案1】:

您可以使用Route::pattern 来实现此目的。

RouteServiceProvider里面boot你可以使用方法:

Route::pattern('category_slug', implode('|', $this->categorySlugs());

并实现 categorySlugs 方法以返回允许的 slugs 数组:

protected function categorySlugs()
{
  $allowedSlugs = [];

  // @todo implement
  // list all options here (probably not the best when you have 5000 options)
  // or load list from database/file

  return $allowedSlugs;
}

【讨论】:

    猜你喜欢
    • 2017-11-27
    • 2018-12-20
    • 2016-01-22
    • 2014-07-21
    • 2016-03-05
    • 2023-04-08
    • 2013-06-02
    • 1970-01-01
    • 2021-02-04
    相关资源
    最近更新 更多