2011-10-24 37 views
0

我有一个Symfony的应用以下途径配置:配置在Symfony的路由具有相同的URL,但不同的HTTP方法和控制器动作

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 } 

executeConfigureexecuteCreate行动。然后,我有一个表格配置是这样的:

<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

如何区分这两个操作保持相同的URL?

谢谢!

回答

6

我也遇到过这个问题,并在旧的论坛信息中找到答案(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

这个答案对旧版本的Symfony很有用,但它在当前版本中已被弃用。还有什么选择? –

0

我解决它通过使用该路由sheme:调用地址,您可以调用用户或用户时

users_create: 
    pattern: /
    defaults: { _controller: "RentalAPIBundle:User:create" } 
    requirements: { _method: post } 

users:  
    pattern: / 
    defaults: { _controller: "RentalAPIBundle:User:index" }  
    requirements: { _method: get } 

然后/为GET,但只有用户/用于POST。我不能说为什么,但它的工作原理

相关问题