2016-12-06 90 views
0

我有方法在我的控制器(singleProduct):多參數路由錯誤laravel

public function singleProduct($slug) 
{ 
    $product= Product::where('slug','=', $slug)->first(); 
    return view('public.product.show')->withProduct($product); 
} 

我的路線是:

Route::get('/{category}/{slug}',['as' => 'single.product', 'uses' => '[email protected]']); 

我的視圖代碼:

<a href="{{ route('single.product', $product->category, $product->slug) }}">{{$product->title}}</a> 

雖然我已經通過了路由所需的兩個參數。我的路由返回了以下錯誤:

Missing required parameters for [Route: single.product] [URI: {category}/{slug}]. 

回答

3

正確的方法FO [R定義路線params爲這樣的:

route('single.product', ['category' => $product->category, 'slug' => $product->slug]) 

所以你考慮的路線將如下:

<a href="{{ route('single.product', ['category' => $product->category, 'slug' => $product->slug]) }}">{{$product->title}}</a> 

Docs

+0

謝謝你。該死的我太傻了,不能錯過它。 –

0

在路由定義你有刺蛾類,但在方法你實際上只蛞蝓,所以可能增加$類別singleProduct將幫助:

public function singleProduct($category, $slug) 
{ 
    $product= Product::where('slug','=', $slug)->first(); 
    return view('public.product.show')->withProduct($product); 
} 
+0

是否有必要使用方法也是這兩個參數? –

+0

是的,如果你在路線上定義了兩個,那麼兩者都需要在動作方法上... 你可以將它們變成可選參數,即 Route :: get('/ {category}/{slug?}' ,['as'=>'single.product','uses'=>'LinkController @ singleProduct']);然後函數解析看起來像 singleProduct($ category,$ slug ='no-slug') –

+0

我需要鏈接構建的兩個參數。 –

0

改變了我的方法:

public function singleProduct($category,$slug) 
{ 
    $product= Product::whereHas('category', function($q) use($category) { 
      $q->where('name','=', $category); 
     }) 
    ->where('slug','=', $slug)->first(); 
    return view('public.product.show')->withProduct($product); 
} 

還是同樣的錯誤

Missing required parameters for [Route: single.product] [URI: {category}/{slug}].