我试图通过与Laravel的隐式绑定来弄清楚如何使用/显示产品的标签和产品URL中的ID。
使用getRouteKeyName()
返回产品slug
,我可以显示产品的信息,例如store.com/product/my-awesome-product
。我还想在网址末尾添加产品ID,例如store.com/product/my-awesome-product/1
。
getRouteKeyName()
是否可以实现此功能,还是我必须执行一个查询,以便通过ID和条形符号查找产品,就像这篇帖子:How to pass two arguments id and slug with url (routing) in laravel 5.1。
还是也可以忽略产品信息,但仍将其保存在网址中?
答案 0 :(得分:2)
您可以在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'));
}
答案 1 :(得分:1)
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
有关更多详细信息,请检查此link