Я пытаюсь понять, как использовать/отображать слаг моего продукта и идентификатор в URL-адресе моего продукта, используя неявную привязку к Laravel.
Используя getRouteKeyName(), который возвращает продукт slug, я могу отобразить слаг моего продукта, например. store.com/product/my-awesome-product. Я также хочу добавить идентификатор продукта в конце URL-адреса, например. store.com/product/my-awesome-product/1.
Возможно ли это с getRouteKeyName() или мне нужно предварительно сформировать запрос на поиск продукта по идентификатору и ярлыку, как в этом посте: Как передать два аргумента id и slug с URL-адресом (маршрутизацией) в laravel 5.1.
Или также можно игнорировать ярлык продукта, но все же иметь его в URL-адресе?






В выпусках laravel github есть закрытая проблема, однако вы можете попробовать что-то вроде этого:
Route::get('products/{product:slug}', 'ProducController@show')->name('product.show'); // Finds product by slug.
Route::get('products/{product}', 'ProducController@show')->name('product.show'); // Finds Product by ID (or whatever is defined in getRouteKeyName()).
route('product.show', $product) -> store.com/product/my-awesome-product
route('product.show', $product) -> store.com/product/1
Для получения дополнительной информации проверьте этот ссылка на сайт
У вас может быть параметр в URL-адресе, который предназначен только для целей SEO (представления) и не способствует логике внутри контроллера.
так :
Route::get('products/{productID}/{ProductName}', 'ProducController@show')->name('product.show');
и внутренний контроллер:
public function show($productId, $productName){
$product = Product::findOrFail($id);
// You can add this optional check to
// make sure product name is correct
$slug = str_slug($product->name, '-');
if (!str_contains($slug, $productName)){
abort(404);
}
return view('product')->with(compact('product'));
}