我在Symfony应用程序中配置了以下路由:
label:
url: /label
param: { module: label, action: configure }
requirements: { sf_method: get }
label_create:
url: /label
param: { module: label, action: create }
requirements: { sf_method: post }
与executeConfigure
和executeCreate
行为相关联。然后我有一个这样配置的表单:
<form action="<?php echo url_for('@label_create') ?>" method="POST">
<?php echo $form->renderHiddenFields() ?>
<input type="hidden" name="sf_method" value="post" />
<!-- more stuff here -->
</form>
每当提交表单时executeConfigure
都会被执行,但据我所知,使用POST
方法配置的路由应该避免这种情况并执行executeCreate
。
如何区分保持相同网址的这两项操作?
谢谢!
答案 0 :(得分:7)
我也有这个问题,并在一个旧的论坛消息中找到答案(http://oldforum.symfony-project.org/index.php/t/25750/)。
如果它完全忽略了请求方法,则很可能使用常规sfRoute。您需要使用sfRequestRoute来使路由“方法感知”。因此,在您的示例中,您将执行:
label:
url: /label
class: sfRequestRoute
param: { module: label, action: configure }
requirements: { sf_method: get }
label_create:
url: /label
class: sfRequestRoute
param: { module: label, action: create }
requirements: { sf_method: post }
答案 1 :(得分:0)
我通过使用这个路由选择来解决它:
users_create:
pattern: /
defaults: { _controller: "RentalAPIBundle:User:create" }
requirements: { _method: post }
users:
pattern: /
defaults: { _controller: "RentalAPIBundle:User:index" }
requirements: { _method: get }
然后在调用Url时,您可以调用user或user /进行GET,但只能调用用户/ POST。我不能说为什么但它有效