3

我正在用 Symfony2 设计 REST API。

对于 POST 和 PUT 请求,我使用的是 FormType。就像是 :

class EmailType extends AbstractType
{
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder->add('subject', 'textarea')
        [...]
        ;
    }

    public function getName()
    {
        return 'email';
    }
}

但是当我发布时,我必须传递带有命名空间的字段,例如:

{
    "email": {
        "subject": "subject"
    }
}

但我不想要这个顶级命名空间!

有任何想法吗 ?

4

2 回答 2

7

表单类型必须有一个名称,因为如果您将其注册为标记为表单类型的服务,您需要以某种方式引用它。在以下代码片段中,email是表单类型的名称:

$form = $this->formFactory->create('email', $email);

这就是为什么你必须在表单类型类中返回一个名称:

public function getName()
{
    return 'email';
}

因此,与其创建一个没有名称的表单类型,不如创建一个具有空名称的表单——该表单类型的一个特定实例:

$form = $this->formFactory->createNamed(null, 'email', $email);

一个空字符串 — ''— 而不是null也可以。

于 2013-10-15T11:07:52.830 回答
-3

我为基于 JSON 的 API 使用了 Symfony 表单。你只需要改变你的getName()方法来返回''

public function getName()
{
    return '';
}

这与FOSRestBundle结合使用,使得处理 POST 数据变得非常容易。

于 2013-09-03T13:24:20.867 回答