【问题标题】:Product slug and id in implicit routing隐式路由中的产品 slug 和 id
【发布时间】:2019-02-09 20:35:30
【问题描述】:

我试图弄清楚如何使用/显示我的产品的 slug 和我的产品 URL 中的 id,使用 Laravel 的隐式绑定。

使用 getRouteKeyName() 返回产品 slug 我可以显示我的产品的 slug,例如store.com/product/my-awesome-product。我还想在 URL 的末尾添加产品的 ID,例如store.com/product/my-awesome-product/1

getRouteKeyName() 是否可以做到这一点,或者我是否必须通过 ID 和 slug 执行查询以查找产品,例如在这篇文章中:How to pass two arguments id and slug with url (routing) in laravel 5.1

或者是否也可以忽略产品 slug,但仍然在 url 中?

【问题讨论】:

    标签: php laravel


    【解决方案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'));
    }
    

    【讨论】:

      【解决方案2】:

      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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-10-01
        • 2014-10-23
        • 1970-01-01
        • 2012-09-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多