2014-02-06 54 views
1

我在symfony路由问题。控制器中的路由。 Symfony2

我有一个函数

public function showresultsAction($product) 

需要的对象$产品运行。

我打电话用下面的行操作:

$product = $form ->get('product'); 
    return $this->redirect($this->generateUrl('_gs_downloads_product', array(
     'object' => $product))); 

当我跑我的申请,我得到:

Controller ProductController::showresultsAction()" requires that you provide a value 
for the "$product" argument (because there is no default value or because there is a 
non optional argument after this one). 

谢谢您的帮助。

我的路由定义:

_gs_downloads_product: 
    path: /download/list/product 
    defaults: { _controller: AcmeProjectBundle:Product:showresults} 
+0

显示您的航线定义 –

+0

@MKhalidJunaid编辑了问题。 – user3279754

回答

1

的问题是与你的路由定义。在你的情况下生成的URL看起来像这样

"/download/list/product" 

改变你的路线是这样的:

_gs_downloads_product: 
    path: /download/list/{product} 
    defaults: { _controller: AcmeProjectBundle:Product:showresults} 

和你的网址就会是这个样子:

"/download/list/12" 

假设你的$product变量是12

+0

谢谢你的回答。有没有办法在URL中显示我的对象?我只需要将'$ product'传递给动作showresults。 – user3279754

+0

据我所知,Symfony没有内置的方法来做到这一点。 – Sehael

1

看着路由您还没有定义的参数在你的路线一样

_gs_downloads_product: 
    path: /download/list/product/{object} 
    defaults: { _controller: AcmeProjectBundle:Product:showresults} 

然后你的函数看起来像

public function showresultsAction($object) 

,你也可以定义你的参数为可选或与任何默认值

_gs_downloads_product: 
    path: /download/list/product/{object} 
    defaults: { _controller: AcmeProjectBundle:Product:showresults, object: null} 

或默认值

_gs_downloads_product: 
    path: /download/list/product/{object} 
    defaults: { _controller: AcmeProjectBundle:Product:showresults, object: 1} 

Routing

+0

谢谢你的回答。 我有两个答案,我问你同样的另一个人。有没有办法在URL中显示我的对象?我只需要将$ product传递给动作showresults。 – user3279754

+0

实体ID不应该在网址中最好的是每个实体都有一个唯一的名称,即对于每个产品,您应该拥有独特的slu and并将这个slu pass通过URL而不是id并与其一起玩 –