2016-12-06 102 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}].