Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/rest/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何使用FOSRest和Symfony表单发布嵌套实体_Php_Rest_Symfony_Fosrestbundle - Fatal编程技术网

Php 如何使用FOSRest和Symfony表单发布嵌套实体

Php 如何使用FOSRest和Symfony表单发布嵌套实体,php,rest,symfony,fosrestbundle,Php,Rest,Symfony,Fosrestbundle,使用Symfony 3.2和FOS REST Bundle,我为资源创建了一些REST端点,并使用Symfony表单定义API文档的字段。到目前为止,一切正常。 现在,我正在尝试改进我的模式,并在我的资源中添加了一个子实体。我希望主资源保存子实体-子实体没有专用端点 我按照上的说明删除了所有其他字段以隔离任何问题 这就是我的表单类型现在的外观: <?php namespace VendorName\MyBundle\Form; use Symfony\Bridge\Doctrine\F

使用Symfony 3.2和FOS REST Bundle,我为资源创建了一些REST端点,并使用Symfony表单定义API文档的字段。到目前为止,一切正常。 现在,我正在尝试改进我的模式,并在我的资源中添加了一个子实体。我希望主资源保存子实体-子实体没有专用端点

我按照上的说明删除了所有其他字段以隔离任何问题

这就是我的表单类型现在的外观:

<?php

namespace VendorName\MyBundle\Form;

use Symfony\Bridge\Doctrine\Form\Type\EntityType;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\OptionsResolver\OptionsResolver;

class CountryType extends AbstractType
{
    /**
     * {@inheritdoc}
     */
    public function buildForm(FormBuilderInterface $builder, array $options)
    {

        $builder
            ->add('mySubEntity', EntityType::class, array(
                'multiple' => false,
                'expanded' => false,
                'property' => 'name',
                'class' => 'MyBundle\Entity\mySubEntity'));
    }

    /**
     * {@inheritdoc}
     */
    public function configureOptions(OptionsResolver $resolver)
    {
        $resolver->setDefaults(array(
            'data_class' => 'VendorName\MyBundle\Entity\Country',
            'csrf_protection' => false
        ));
    }

}
现在,当我加载api文档时,我收到错误消息option属性不存在。定义的选项有:操作、允许额外字段、[…]

老实说,我甚至不知道将实体添加到表单中是否是使其显示在API文档中的正确方法。如能帮助解决上述问题和/或实现这一目标的最佳做法,我们将不胜感激


编辑:多亏了@miikes,这个错误现在得到了解决,我可以看到api文档与嵌套表单的字段一起正确显示。但是,现在我的问题是表单没有填充父实体上的子实体。这似乎与我对父子关系建模的方式有关,我发布了一个。

要解决您的错误,请尝试使用choice_标签,而不是属性选项

'选择标签'=>'名称'

但是参考文档,所以使用这种类型,您只能选择现有实体,而不能持久化新实体

创建新实体实例最简单、最清晰的方法是创建另一个为实体设计的类型类,并将该类型作为字段添加到CountryType中

因此,您应该将表单数据作为

['mySubEntity']['some-field'] = 'foo'
['mySubEntity']['another-field'] = 'bar'

另一个技巧是使用Country::class而不是字符串“VendorName\MyBundle\Entity\Country”,因为在重命名类的情况下,IDE重构应该会影响您的类型。

!这就像一个魅力-创建一个子实体类型是一条路要走。谢谢您:
['mySubEntity']['some-field'] = 'foo'
['mySubEntity']['another-field'] = 'bar'