2011-07-20 67 views
1

我知道我的问题很简单,但我会问它:希望有人可以给我一个提示。Symfony2基本的URL路由问题

我正在使用Symfony2重写PHP Web应用程序。我需要的是执行对数据库对象的CRUD操作(其中有一个主键和另外两个领域,被称为field1field2

在我的旧网络的软件,我用回忆这个网址:

http://myhost/updateProduct.php?id=foo&field1=value1&field2=value2 

调用updateProduct.php脚本更新id = foo的对象,将field1的value1设置为field2的value2。

现在我愿意使用Symfony2控制器来完成这项工作......我不知道应该为此设置哪个路由。我的控制器是ProductController,它嵌入了一个updateAction($id,$field1,$field2)方法。

我试图像(阳明语法):

myBundle_update: 
    pattern: /product/update/{id}/field1={value1}&field2={value2} 
    defaults: { _controller: TestMyBundle:Product:update } 

,但它不工作。

所以我的问题是:我错误的路由语法(如果是这样,哪个是正确的)?或者有什么我错过了如何正确地将请求参数分配给控制器?

在此先感谢

回答

3

你可能想你的路线,看起来像这样:

pattern: /product/update/{id}/{value1}/{value2} 

这样才刚刚调用/产品/更新/ 1/fieldValue1/fieldValue2更新产品。

我不确定,但可能路由与您的路由有一些问题,在其路由中定义&。

更新: 啊,问题很可能在于你没有在你的两个值之间。 Symfony2使用正则表达式[^ /] +作为参数的标准正则表达式。

http://symfony.com/doc/current/cookbook/routing/slash_in_parameter.html

+0

您提到的模式是有效的,我一直在考虑使用它。但是我想用某种“用户友好”的URL来指定字段名称,这种或那种方式。没有任何方法可以转义Symfony2路由中的&和=字符吗? – csparpa

+1

你可以尝试一些对需求增加的格局是这样 要求: 值1:“[^&] +” 因此它将停止当它找到的第一个和 – kufi

+0

&和=可百分比编码(搜索%26和%3D),并且路线不会中断,但Symfony2路由器不会匹配它们(因为它会尝试从字面上匹配%26和%3D)。 – Adrian