2013-10-10 38 views
0

我有一个表单,我想在我的网站的几个页面中使用。 所以我呼吁这样的方法在我的网页:Symfony2呈现和表单

{{ render(controller('ProjectApplicationBundle:Application:form')) }} 

我有我的formAction方法:

public function formAction() 
{ 
    $form = $this->createForm($type,$obj); 

    if('POST' == $this->getRequest()->getMethod()){ 
     $form->submit($this->getRequest()); 
     if($form->isValid()){ 
      //redirect to a page after the form 
     } 
    } 
    //render the form template ... 
} 

这不是我的代码,这只是一个例子。

所以我加入到创建一个路由送我的形式

project_application_form: 
    pattern: /form 
    defaults: { _controller: ProjectApplicationBundle:Application:form } 

现在我的问题:)

1)我想使用的URL阻止访问我的形式,只允许进行数据处理。

2)如果错误的页面不重定向,所以窗体显示没有布局,所以我想在窗体的页面中显示错误的形式。

编辑:我可能有第二点的解决方案,但这不是很合适。 在我的参数中设置渲染路线并返回到路线而不是呈现渲染窗体。最后,我使用会话来输入错误。

我希望这对你很清楚,对不起我的英语。

+0

你是什么意思通过阻止访问表单并只允许数据处理?您是否想让路由仅可用于POST请求? – nifr

+0

好像你必须在你需要的所有控制器动作中使用你的formtype – sergekv

回答

1

你必须保证,你处理你的表单的动作,并使其可仅由POST

例子:

use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route; 
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Method; 

class RegisterController extends Controller 
{ 
    /** 
    * @Route("/register/process", name="process_form_register") 
    * @Method({"POST"}) 
    */ 
    public function processAction(Request $request) 
    { 
     $form = $this->createFrom(new RegisterType()); 
     $form->submit($request); 

     if($form->isValid()){ 
      //redirect to a page after the form 
     } 
    } 
} 

如果使用yml语法的路线,这会是:

process_form_register: 
    pattern: /register/process 
    defaults: { _controller: ...... } 
    requirements: 
     _method: POST 

为你的2)点打开一个新问题,因为每个线程只有一个问题,它是另一个问题

+0

谢谢,我会打开一个新的问题2 – Ajouve

+0

我很好奇第二部分:http://stackoverflow.com/questions/19896639 /渲染控制器和获取 - 成型 - 错误 - 从孩子 –