Symfony2奏鸣曲集合在编辑或显示中显示为空

时间:2015-10-15 12:58:40

标签: php symfony sonata-admin

当我创建产品时,我使用sonata_type_collection作为我的关系...它就像一个魅力,并且值正确地插入到daabase中。

然而,如果我然后转到我的产品上显示或编辑我没有收到任何错误,但值没有显示,就像我从未添加它们。

例如:

在我的产品中,我可以添加几个类别:

->add('category', 'sonata_type_collection',
                array(
                    'required' => false,
                    'label' => 'Category',
                ),
                array(
                    'edit' => 'inline',
                    'inline' => 'table',
                    //'sortable' => 'id',
                )
            )

Ant我的ProductCategoryAdmin很简单:

/**
 * @param FormMapper $formMapper
 */
protected function configureFormFields(FormMapper $formMapper)
{
    $formMapper
        ->add('categoryId')
    ;
}

所以我在我的产品中添加了两个类别并创建它。它们被插入数据库中。

现在,如果我点击编辑产品,它会显示0个类别......为什么会这样?除了这个类别集合外,所有其他集合都正常工作。

1 个答案:

答案 0 :(得分:1)

数据库中的ProductCategory是否同时具有productId和categoryId? 如果您的产品类别未在展示和编辑产品中显示,则似乎productId未插入您的ProductCategory。

我通常会添加' by_reference' =>在我的sonata_type_collection上为false,强制调用所有setter。

by_reference的官方文档:http://symfony.com/doc/current/reference/forms/types/collection.html#by-reference

有了它,你的代码就是:

->add('category', 'sonata_type_collection',
    array(
        'required' => false,
        'by_reference' => false,
        'label' => 'Category',
    ),
    array(
        'edit' => 'inline',
        'inline' => 'table',
        //'sortable' => 'id',
    )
)

另外,我会命名字段类别而不是类别:)