说我有一个item的数据库,每个数据库都属于一个国家,县和城市。我希望有一条路线列出单个国家,县或城市中的所有items。每个国家/地区/城市都有一个条目,例如france
表示要在URL中使用的France
。
我希望所有路线都具有相同的格式:/items-in-{slug}
,例如/items-in-france
或/items-in-paris
。
但是,slug
可以是多个模型之一的子弹。对于这种情况最好的设置是什么?我可以想到3个主要选项:
RoutingController
或类似名称,然后依次检查哪个Model slug代表并推广到正确的控制器方法(例如viewInCountry($slug)
或[C0 ])所有选项似乎都有些怪异,我想知道是否对此有更优雅的解决方案。
我会选择第二种选择,除了不要使用正则表达式来接受现有的子弹。相反,您可以编写自己的模型路由绑定解析逻辑,如“自定义解析逻辑”中提到的viewInCity($slug)
。这样的事情可能可以解决问题:
here
或者,如果您愿意稍微调整网址,则可以为每个模型创建一个路由和一个控制器。这将需要您使用// Put this in your RouteServiceProvider.php
public function boot()
{
parent::boot();
Route::bind('slug', function ($value) {
$country = App\Country::where('slug', $value)->first();
if ($country !== null) {
return $country;
}
$city = App\City::where('slug', $value)->first();
if ($city !== null) {
return $city;
}
// Repeat for each model.
// 404 in case no model has been matched.
abort(404).
});
}
或/items/france
等网址。