2 回答
TA贡献1111条经验 获得超0个赞
您可以在模型中定义一个增变器,例如
protected $appends = ['slug'];
和
public function getSlugAttribute() {
$slug = $this->brand . '-' . $model . '-' . $modification . '-' . $category;
return $slug;
}
现在,它只是一个模型属性,您可以使用路由模型绑定概念
public function getRouteKeyName()
{
return 'slug';
}
所有在你雄辩的模型和控制器中
public function show(YourModel $slug) {
return $slug;//your model instance
}
未经测试,但它应该可以正常工作。
TA贡献1869条经验 获得超4个赞
Laravel 文档说明如下:
路由参数始终包含在 {} 大括号内,并且应该由字母字符组成,并且不能包含 - 字符。不要使用 - 字符,而是使用下划线 (_)。
更多信息:https : //laravel.com/docs/5.8/routing#required-parameters
一种解决方法是在生成 url 之前替换 url 部分:
路线:
Route::get('{brand}-{model}-{modification}-{category}', 'Frontend\PagesController@category')->middleware('custom-routing')->name('frontend.category');
链接:
<a href="{{ route('frontend.category', [str_replace('-', '_', 'alfa-romeo'), 'giulietta', 'modification', 'category']) }}">test</a>
控制器:
class PagesController
{
public function category(...$args)
{
// or use list(...)
[$brand, $model, $modification, $category] = array_map(function($urlPart) {
return str_replace('_', '-', $urlPart);
}, $args);
return 'test';
}
}
- 2 回答
- 0 关注
- 166 浏览
添加回答
举报