Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/131.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/dart/3.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
Symfony 如何正确配置';索纳塔风格系列';奏鸣曲中的场_Symfony_Sonata Admin_Symfony Sonata_Sonata - Fatal编程技术网

Symfony 如何正确配置';索纳塔风格系列';奏鸣曲中的场

Symfony 如何正确配置';索纳塔风格系列';奏鸣曲中的场,symfony,sonata-admin,symfony-sonata,sonata,Symfony,Sonata Admin,Symfony Sonata,Sonata,简言之: 当我在OneToMany关系中使用“sonata_type_collection”时,我必须指定关系的另一端,该一端在“创建操作”中仍然不存在,在“更新操作”中可以设置,但也可以指定完全不同的父对象 更详细的解释: 我使用Sonata管理包进行CRUD操作,假设我只有Post(id、标题、内容)和Tag(id、Post_id、标题)实体。 我希望能够在编辑Post实体时添加和删除标记实体,因此我使用“sonata_type_collection”字段 这是PostAdmin类中的con

简言之:

当我在OneToMany关系中使用“sonata_type_collection”时,我必须指定关系的另一端,该一端在“创建操作”中仍然不存在,在“更新操作”中可以设置,但也可以指定完全不同的父对象

更详细的解释:

我使用Sonata管理包进行CRUD操作,假设我只有Post(id、标题、内容)和Tag(id、Post_id、标题)实体。 我希望能够在编辑Post实体时添加和删除标记实体,因此我使用“sonata_type_collection”字段

这是PostAdmin类中的configureFormFields方法:

protected function configureFormFields(FormMapper $formMapper)
{
    $formMapper                           
            ->add('title')
            ->add('content')
            ->add('tags', 'sonata_type_collection', array(), array(
                'edit' => 'inline',
                'inline' => 'table'
            ))  
        ))                
    ; 
}
问题是,在create表单中,当我添加新标记时,我必须同时指定post和title,但是post仍然不存在,因此我无法添加标记。 当我编辑帖子时,我可以添加新的标签,但是对于每一个标签,我都必须显式地设置帖子,例如,我可以为完全不同的帖子添加标签


您能告诉我如何解决此问题吗?

您可能希望将“按引用”选项设置为false

protected function configureFormFields(FormMapper $formMapper)
{
    $formMapper                           
            ->add('title')
            ->add('content')
            ->add('tags', \Sonata\CoreBundle\Form\Type\CollectionType::class, 
                          array('by_reference' => false),
                          array('edit' => 'inline',
                                'inline' => 'table'
                               )
                 );
}
[编辑] 因此,问题似乎来自Post实体,它必须从addTag()方法调用tags的setPost()方法


我不确定,但如何添加原型字段设置为真。至少当你处理这类信息时,你就是这么做的。我不知道这个字段是什么以及如何设置它。你能告诉我你是什么意思吗?我在问这个问题之前试过了,但运气不好。无论如何,这个设置的目的是什么?引用Symfony的doc,通过引用false进行设置会强制在父对象上调用setter,这在您的情况下似乎是合适的。你的实体看起来像什么?也许您应该检查处理关系的setter。问题出在Post实体的addTag($tag)方法中。我必须通过调用$tag->setPost($this)显式地将post设置为标签;如果你在回答中加上这一点,我将很乐意接受。
public function addTag($tag)
{
    $tag->setPost($this);
    $this->tags->add($tag);

    return $this;
}