【问题标题】:Symfony2 basic URL routing issueSymfony2 基本 URL 路由问题
【发布时间】:2011-07-20 11:02:20
【问题描述】:

我知道我的问题非常...简单明了,但我还是会问:希望有人能给我提示。

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

在我的旧网络应用中,我曾经记得这个 URL:

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

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

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

我尝试过类似(yml 语法):

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

但它不起作用。

所以我的问题是:我弄错了路由语法(如果是,哪个是正确的)?或者我是否缺少关于如何将请求参数正确拆分到控制器的内容?

提前致谢

【问题讨论】:

    标签: controller query-string url-routing symfony


    【解决方案1】:

    您可能希望您的路线看起来像这样:

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

    这种方式只需调用 /product/update/1/fieldValue1/fieldValue2 来更新产品。

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

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

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

    【讨论】:

    • 你提到的模式是有效的,我一直在考虑使用它。但我想使用某种“用户友好”的 URL,可以通过一种或另一种方式指定字段名称。 Symfony2 路由中的 & 和 = 字符有没有办法转义?
    • 你可以尝试向模式中添加一个要求,如下所示: value1: "[^&]+" 所以它会在找到第一个 & 时停止搜索
    • & 和 = 可以进行百分比编码(分别为 %26 和 %3D)并且路由不会中断,但是 Symfony2 路由器不会匹配它们(因为它会尝试匹配 %26 和 %3D字面意思)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-03-10
    • 2016-09-23
    • 1970-01-01
    • 2011-11-20
    • 1970-01-01
    • 2016-10-31
    • 1970-01-01
    相关资源
    最近更新 更多