aschaeffer/sonata-editable-list-bundle

Symfony SonataClassificationBundle

4.0 2024-09-26 16:01 UTC

This package is auto-updated.

Last update: 2024-09-26 16:03:02 UTC


README

Sonata Editalbe List Bundle 允许您为实体定义可编辑列表。

安装

使用以下命令安装包

composer require aschaeffer/sonata-editable-list-bundle

如果您使用 Symfony Flex,您还需要在您的 AppKernel.php 文件中启用 Aschaeffer\SonataEditableListBundle\AschaefferSonataEditableListBundle

然后,您可以在 App\Entity 中添加 SonataEditableListSonataEditableItem。类可以在本存储库的 recipe 分支中找到。

另外,添加以下配置

#config/packages/aschaeffer_sonata_editable_list.yaml
aschaeffer_sonata_editable_list:
  class:
    list: App\Entity\SonataEditableList
    item: App\Entity\SonataEditableItem

使用方法

在您的实体中添加 Listable 注解以使用可编辑列表

<?php

class User {
    /**
     * @Listable(code="user_gender")
     * @ORM\ManyToOne(
     *     targetEntity="SonataEditableItem", cascade={"persist"}
     * )
     * @ORM\JoinColumn(name="gender_id", referencedColumnName="id")
     *
     * @var SonataEditableItem
     */
    protected $gender;
       
    /**
     * @var SonataEditableItem[] $interests
     * @ORM\ManyToMany(targetEntity="SonataEditableItem")
     * @ORM\JoinTable(name="users_interests",
     *      joinColumns={@ORM\JoinColumn(name="user_id", referencedColumnName="id")},
     *      inverseJoinColumns={@ORM\JoinColumn(name="item_id", referencedColumnName="id")}
     *      )
     * @Listable(code="user_interests")
     */
    protected $interests;
}

在 Sonata 管理员中创建 user_genderuser_interests 列表,或使用 sonata:editable_list:create 命令初始化列表并定义所有可能的值。

在您的 Sonata 管理员类中,listable 属性将分别在 ShowMapperListMapper 中。当在 FormMapperDatagridMapper 中使用这些属性时,您需要添加以下代码

    use Aschaeffer\SonataEditableListBundle\Form\Type\ItemSelectorType;
    class UserAdmin {
        protected function configureFormFieldsProperties(FormMapper $formMapper) {
            $formMapper
                ->add('gender', ItemSelectorType::class,
                    [
                        'model_manager' => $this->getModelManager(),
                        'class' => SonataEditableItem::class,
                        'required' => true,
                        'expanded' => true,
                        'multiple' => false,
                    ]
                )
                ->add('interests', ItemSelectorType::class,
                    [
                        'model_manager' => $this->getModelManager(),
                        'class' => SonataEditableItem::class,
                        'required' => true,
                        'expanded' => true,
                        'multiple' => true,
                    ]
                )
        }
        
        protected function configureDatagridFilters(DatagridMapper $datagridMapper)
        {
            $datagrid
                ->add('gender', null, [],
                    ItemSelectorType::class,
                    [
                        'model_manager' => $this->getModelManager(),
                        'class' => SonataEditableItem::class,
                        'multiple' => true,
                        'field_name' => 'gender',
                        'class_name' => User::class,
                    ]
                )
                ->add('gender', null, [],
                    ItemSelectorType::class,
                    [
                        'model_manager' => $this->getModelManager(),
                        'class' => SonataEditableItem::class,
                        'multiple' => true,
                        'field_name' => 'interests',
                        'class_name' => User::class,
                    ]
                )
        }
    }