从请求中获取AbstractType

时间:2012-10-19 11:29:52

标签: symfony controller abstract-type

用户将使用symfony 2框架构建的表单与抽象类型:

相加
<?php
$form = $this->createForm(new MyAbstractType(), new MyEntity());

我在动作中收到此帖子请求:

public function receiveFormRequestAction(Request $request){
    //How do I get the abstract type from the request?
}

我需要能够仅使用请求中的信息来创建表单上使用的AbstractType。

  1. 有可能吗?
  2. 你是怎么做到的?
  3. 感谢。

    编辑:

    很抱歉,如果我不够清楚的话。在方法“recieveFormRequestAction”我不知道我将得到什么抽象类型,所以我不能将表单直接绑定到MyAbstractType。

    理论上,此操作可以接收任何AbastractType并绑定它。

3 个答案:

答案 0 :(得分:1)

  1. 喜欢这样:

    // first, create the very same form
    $form = $this->createForm(new MyAbstractType(), new MyEntity());
    // bind the form with your request
    $form->bind($request);
    // Optional step : validate the form
    if ($form->isValid()) {
        // your object is ready, get it like this:
        $object = $form->getData();
    } else {
         // handle the validation errors.
    }
    

答案 1 :(得分:0)

您需要将Request对象绑定到表单。

$form->bind($request);

然后您可以运行$form->isValid()$form->getData()等内容。

答案 2 :(得分:0)

我最终这样做了:

  1. 我的表单上的方法getName()返回的名称与Form类名称

    完全相同
    Class MyAbstractType extends AbstractType
      [...]
      public function getName(){
        return "MyAbstractType";
    }
    
  2. 现在我可以使用参数键上的哈希来获取类型

    public function myAction(Request $request){
    $parameterKeys = $request->request->keys();
    $formName = $parameterKeys[0];
    
  3. 丑陋,但我需要一个快速的解决方案。直到有一个更清洁的,我接受这个。