繁体   English   中英

以Symfony2格式删除表单命名空间(对于REST API)

[英]Remove form namespace in Symfony2 form (for REST API)

我正在使用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';
    }
}

但是当我发布POST时,我必须传递具有名称空间的字段:

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

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

有任何想法吗 ?

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

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

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

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

因此,不是创建没有名称的表单类型 ,而是创建一个表单 - 该表单类型的特定实例 - 使用空名称:

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

空字符串 - '' - 而不是null也可以。

我已经为基于JSON的API使用了Symfony表单。 您只需要将getName()方法更改为''

public function getName()
{
    return '';
}

这与FOSRestBundle相结合 ,使得处理POSTed数据非常容易。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM