0

用户总结了一个使用 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. 你怎么做呢?

谢谢。

编辑:

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

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

4

3 回答 3

1
  1. 是的

  2. 像这样:

    // 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.
    }
    
于 2012-10-19T11:50:22.707 回答
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];
    

丑得要命,但我需要一个快速的解决方案。直到有一个更清洁的,我接受这个。

于 2012-11-17T03:58:59.327 回答
0

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

$form->bind($request);

然后你可以运行类似$form->isValid()and的东西$form->getData()

于 2012-10-19T11:51:35.613 回答