symfony路由似乎与GET一起使用,但不适用于POST

时间:2011-05-12 20:57:44

标签: symfony1

我的页面的URI为/importBundle/96/iTunes,其中96是导入包的ID。当我在浏览器中导航到此页面时,它可以正常工作。但是,当我提交表单(提交回同一页面)时,我得到“Action”importBundle / 96“不存在”,这是绝对正确的,但这不是我要告诉它的地方。当我收到此错误时,我仍然会在地址栏中看到/importBundle/96/iTunes

知道为什么会这样吗?

(我正在使用symfony 1.4。)

编辑:这是我在routing.yml中的内容:

import_bundle:
  class: sfDoctrineRouteCollection
  options:
    model:                ImportBundle
    module:               importBundle
    prefix_path:          /importBundle
    column:               id
    with_wildcard_routes: true

这是我的开场<form>标签:

<form action="<?php echo url_for('importBundle/iTunes?id='.$import_bundle->getId()) ?>" method="post" enctype="multipart/form-data">

编辑2 :以下是我尝试添加sf_method的方式:

import_bundle:
  class: sfDoctrineRouteCollection
  options:
    model:                ImportBundle
    module:               importBundle
    prefix_path:          /importBundle
    column:               id
    with_wildcard_routes: true
  requirements:
    sf_method: [get,post]

它不起作用。我做错了吗?我这样做的方式似乎与the docs一致,所以我很困惑。

3 个答案:

答案 0 :(得分:1)

我最终只为这一页创建了一个全新的路由规则。不是很酷的事情,但它有效。

import_bundle_itunes:
  class:   sfDoctrineRoute
  url:     /iTunes/:id
  options: { model: ImportBundle, type: object }
  param:   { module: importBundle, action: iTunes }
  requirements:
    id: \d+
    sf_method: [get,post]

答案 1 :(得分:0)

您可能正在使用post方法提交表单,并且仅针对get方法配置了相关路由。然后,symfony回退到默认的/:module /:action / * route,显然找不到“importBundle / 96”。

如果您发布到同一页面,则应该为get和post方法配置url。

url_name:
  requirements:
    sf_method: [get,post]

答案 2 :(得分:0)