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 關注
- 185 瀏覽
添加回答
舉報