symfony - sonata admin 一对多和多对多形式

标签 symfony sonata-admin

我有 OneToMany 相关实体图库和媒体存储在 gallerys_media 中 我在 GalleryMedia Entity 中有多对一相关和多对一相关

/**
* @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;

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

最佳答案

  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',
               ])
  • 多对多: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
             ])
    

    关于symfony - sonata admin 一对多和多对多形式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47147782/

    相关文章:

    php - 忽略 Autowiring 目录中的类

    Symfony2 设置

    jquery - 复选框 jQuery .on() 无法在 SonataAdminBundle 2.3 和 Symfony 2.3 中工作

    symfony - 奏鸣曲管理员 : replace ID in breadcrumbs

    javascript - CKEditor 焦点 CSS 更改

    javascript - 返回确认取消按钮不起作用

    symfony - 如何显示自定义的 404 错误页面 - Symfony2

    symfony - 将 sonata_media_type 用作 1 :N via a sonata_type_collection field 时出现 500 错误

    symfony - 如何在 SonataAdminBundle 中使用角色

    symfony - 如何在表单中添加非持久字段?