隐式路由中的产品信息和ID

时间:2019-02-09 20:35:31

标签: php laravel

我试图通过与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

还是也可以忽略产品信息,但仍将其保存在网址中?

2 个答案:

答案 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