sherlockode / sonata-sortable-bundle
Sonata admin 用于管理实体位置的 Symfony Bundle
v0.1.0
2022-12-07 09:51 UTC
Requires
- php: ^8.1
- gedmo/doctrine-extensions: ^2.3.4 || ^3.0.0
- sonata-project/admin-bundle: ^4.0
This package is auto-updated.
Last update: 2024-09-13 11:06:00 UTC
README
请确保全局已安装 Composer,如 Composer 文档中的 安装章节 所述。
使用 Symfony Flex 的应用程序
打开命令控制台,进入您的项目目录并执行
$ composer require sherlockode/sonata-sortable-bundle
不使用 Symfony Flex 的应用程序
步骤 1:下载 Bundle
打开命令控制台,进入您的项目目录并执行以下命令以下载此 Bundle 的最新稳定版本
$ composer require sherlockode/sonata-sortable-bundle
步骤 2:启用 Bundle
然后,通过将其添加到项目 config/bundles.php
文件中注册的 Bundle 列表来启用 Bundle
// config/bundles.php return [ // ... Sherlockode\SonataSortableBundle\SherlockodeSonataSortableBundle::class => ['all' => true], ];
在管理员列表中的可排序行为
先决条件
您需要有一个运行中的 Sonata admin,并且已安装和配置了 gedmo/doctrine-extensions
(检查 stof/doctrine-extensions-bundle
以实现简单集成)。
方案
首先,在您的实体中添加一个位置属性
// src/Entity/Category.php namespace App\Entity; use Doctrine\ORM\Mapping as ORM; use Gedmo\Mapping\Annotation as Gedmo; /** * @ORM\Table(name="category") * @ORM\Entity */ class Category { /** * @var int * * @Gedmo\SortablePosition * @ORM\Column(name="position", type="integer") */ private $position; }
要使用 Sonata 更改此位置,我们需要在我们的 admin 中添加一个新的路由
// src/Admin/CategoryAdmin.php namespace App\Admin; use Sonata\AdminBundle\Admin\AbstractAdmin; use Sonata\AdminBundle\Route\RouteCollectionInterface; class CategoryAdmin extends AbstractAdmin { // ... /** * @param RouteCollectionInterface $collection * * @return void */ protected function configureRoutes(RouteCollectionInterface $collection): void { $collection->add('move', $this->getRouterIdParameter().'/move/{direction}'); } }
更新 admin 配置以使用我们的自定义控制器
services: admin.category: class: 'App\Admin\CategoryAdmin' arguments: [ ~, App\Entity\Category, 'Sherlockode\SonataSortableBundle\Controller\SortableController' ] tags: - { name: sonata.admin, manager_type: orm, label: Categories }
然后,在 admin 中添加默认按位置排序
// src/Admin/CategoryAdmin.php namespace App\Admin; use Sonata\AdminBundle\Admin\AbstractAdmin; use Sonata\AdminBundle\Datagrid\DatagridInterface; class CategoryAdmin extends AbstractAdmin { // ... protected function configureDefaultSortValues(array &$sortValues): void { $sortValues[DatagridInterface::PAGE] = 1; $sortValues[DatagridInterface::SORT_ORDER] = 'ASC'; $sortValues[DatagridInterface::SORT_BY] = 'position'; } }
添加控件,允许用户更改项目位置
// src/Admin/CategoryAdmin.php namespace App\Admin; use Sonata\AdminBundle\Admin\AbstractAdmin; use Sonata\AdminBundle\Datagrid\ListMapper; class CategoryAdmin extends AbstractAdmin { // ... /** * @inheritDoc */ protected function configureListFields(ListMapper $list): void { $list // your other fields ->add(ListMapper::NAME_ACTIONS, null, [ 'actions' => [ 'move' => [ 'template' => '@SherlockodeSonataSortable/list__action_move.html.twig', ], ], ]) ; } }