【问题标题】:sonata admin one to many and many to many form奏鸣曲管理一对多和多对多形式
【发布时间】:2018-04-19 06:08:16
【问题描述】:

我有 OneToMany 相关实体 Gallery 和 Media 存储在 gallery_media 我在 GalleryMedia 实体中有多对一相关和多对一相关

/**
* @var ArrayCollection
*
* @ORM\OneToMany(targetEntity="\Entity\GalleryMedia", mappedBy="gallery", cascade={"persist", "remove"})
*/
protected $galleriesMedia;

在 GalleryMedia 实体中

/**
 * @ORM\ManyToOne(targetEntity="\Entity\Gallery", inversedBy="galleriesMedia")
 * @ORM\JoinColumn(name="gallery_id", referencedColumnName="id", nullable=false)
 */
protected $gllary;

/**
 * @ORM\ManyToOne(targetEntity="\Entity\Media", inversedBy="galleries")
 * @ORM\JoinColumn(name="media_id", referencedColumnName="id", nullable=false)
 */
protected $media;

我如何在表单中做到这一点

【问题讨论】:

    标签: symfony sonata-admin


    【解决方案1】:
    1. 一对多:sonata_type_collection

    在你的情况下:

           class GalleryAdmin 
           {
               // ...
    
                $formMapper    
                    ->add('galleriesMedia', 'sonata_type_collection', [
                        'required'      => false,
                        'label'         => 'my_galleries_media_label',   
                        'btn_add'       => 'my_add_button_name',
                        'type_options'  => [
                            'delete' => false,
                        ],
                    ], [
                        'edit'          => 'inline', // or standard
                        'inline'        => 'table',  // or standard
                        'sortable'      => 'id',     // by any field in your entity
                        'limit'         => 5,        // you can remove this - this is a limit of items
                        'allow_delete'  => false, 
                        'placeholder'   => $this->trans('admin.placeholder.no_media'), 
                    ])
                ;
    
           class GalleriesMediaAdmin 
           {
                // ...
    
               $formMapper 
                   ->add('media', 'sonata_type_model_list', [
                       'required'      => true,
                       'btn_add'       => false,
                       'btn_list'      => 'name_of_list_button'
                       'btn_delete'    => false,     
                       'btn_catalogue' => 'admin', 
                       'label'         => 'name_of_your_label',
                   ], [
                       'placeholder'   => 'choose media',
                       'edit'      => 'inline',
                       'inline'    => 'table',
                       'sortable'  => 'id',
                   ])
    
    1. 多对多:sonata_type_model

    您可以使用教义进行多对多:

    class Gallery 
    {
        // ...
    
         /**
         * Unidirectional Many-To-Many ()
         *
         * Every Gallery can have a lot of medias 
         *
         * @ORM\ManyToMany(targetEntity="\Entity\Media")
         * @ORM\JoinTable(
         *      name="gallery_media_table",
         *      joinColumns={@ORM\JoinColumn(name="gallery_id", referencedColumnName="id", onDelete="CASCADE")},
         *      inverseJoinColumns={@ORM\JoinColumn(name="media_id", referencedColumnName="id", onDelete="CASCADE")}
         *      )
         *
         * @Assert\Valid()
         */
         protected $medias;
    

    那么在你的 GalleryAdmin 中你应该使用 sonata_type_model:

         $formMapper
             ->add('medias', 'sonata_type_model', [
                 'multiple'              => true,
                 'expanded'              => true,     // or false
                 'class'                 => Media::class,
                 'property'              => 'name',   // or any field in your media entity
                 'label'                 => 'your_label',
                 'btn_add'               => true,
                 'btn_list'              => false,
                 'btn_delete'            => true,
                 'btn_catalogue'         => 'admin',   // or your own translate catalogue in my case file admin.en.yml
             ])
    

    【讨论】:

      猜你喜欢
      • 2015-09-06
      • 2015-02-24
      • 1970-01-01
      • 2017-04-09
      • 2014-04-01
      • 2014-11-29
      • 1970-01-01
      • 1970-01-01
      • 2017-04-13
      相关资源
      最近更新 更多