Symfony 2.1 Sonata 管理包 OneToMany

Posted

技术标签:

【中文标题】Symfony 2.1 Sonata 管理包 OneToMany【英文标题】:Symfony 2.1 Sonata Admin Bundle OneToMany 【发布时间】:2012-09-24 08:42:11 【问题描述】:

假设我有两个实体:

1.产品

/**
 * @ORM\Table()
 * @ORM\Entity
 */
class Product

    /*   
     * @ORM\Column(name="name", type="string", length=255)
     */
    private $name;

    /**
     * @ORM\OneToMany(targetEntity="Catalog", mappedBy="product")
     */
    public $catalogs;

    public function __construct()
    
        $this->catalogs = new \Doctrine\Common\Collections\ArrayCollection();
    

2.目录

/**
 *
 * @ORM\Table()
 * @ORM\Entity
 */
class Catalog

    /**
     * @ORM\ManyToOne(targetEntity="Product", inversedBy="catalogs") 
     */
    private $product;

    /**
     * @ORM\Column(name="name", type="string", length=255)
     */
    private $name;

我的ProductAdmin

class ProductAdmin extends Admin

    protected function configureFormFields(FormMapper $formMapper)
    
        $formMapper
        ->add('name')
        ->add('catalogs', 'sonata_type_model')
        ;
    

我无法让catalogs 正常工作(此处类似于用户=> 组关联:http://demo.sonata-project.org/admin/sonata/user/user/create 凭据:管理员/管理员)。 我只得到错误:No entity manager defined for class Doctrine\Common\Collections\ArrayCollection

【问题讨论】:

【参考方案1】:

尝试多个选项:

 protected function configureFormFields(FormMapper $formMapper)
    
        $formMapper
        ->add('name')
        ->add('catalogs', 'sonata_type_model', array('multiple' => true)
        ;
    

【讨论】:

非常感谢!【参考方案2】:

您必须为目录实体添加一个单独的管理类。

只有拥有与 ProductAdmin 相同的 CatalogAdmin 时,才能使用 Catalog。 之后,您可以使用 sonata_type_model 或 sonata_type_model_list 表单类型。

【讨论】:

以上是关于Symfony 2.1 Sonata 管理包 OneToMany的主要内容,如果未能解决你的问题,请参考以下文章

在 symfony2 sonata 管理包中设置默认值

在 symfony sonata 管理包的不同子菜单中拆分域

Symfony 2 Sonata 媒体包:在没有奏鸣曲管理员的情况下保存媒体文件图像

Symfony 2.8 Twig_Error_Runtime Sonata 管理包

Symfony Sonata 媒体包

Sonata 管理包模板