aschaeffer / sonata-editable-list-bundle
Symfony SonataClassificationBundle
4.0
2024-09-26 16:01 UTC
Requires
- php: ^7.2 || ^8
- symfony/config: ^4.3 || ^5.0 || ^6.0
- symfony/console: ^4.3 || ^5.0 || ^6.0
- symfony/dependency-injection: ^4.3 || ^5.0 || ^6.0
- symfony/form: ^4.3 || ^5.0 || ^6.0
- symfony/http-foundation: ^4.3 || ^5.0 || ^6.0
- symfony/http-kernel: ^4.3 || ^5.0 || ^6.0
- symfony/options-resolver: ^4.3 || ^5.0 || ^6.0
Requires (Dev)
- sonata-project/admin-bundle: ^3.59 || ^4.0 || ^5.0
- sonata-project/doctrine-orm-admin-bundle: ^3.4 || ^4.0 || ^5.0
README
Sonata Editalbe List Bundle 允许您为实体定义可编辑列表。
安装
使用以下命令安装包
composer require aschaeffer/sonata-editable-list-bundle
如果您不使用 Symfony Flex,您还需要在您的 AppKernel.php
文件中启用 Aschaeffer\SonataEditableListBundle\AschaefferSonataEditableListBundle
。
然后,您可以在 App\Entity
中添加 SonataEditableList
和 SonataEditableItem
。类可以在本存储库的 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_gender
和 user_interests
列表,或使用 sonata:editable_list:create
命令初始化列表并定义所有可能的值。
在您的 Sonata 管理员类中,listable 属性将分别在 ShowMapper
和 ListMapper
中。当在 FormMapper
和 DatagridMapper
中使用这些属性时,您需要添加以下代码
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, ] ) } }