ns/admin-bundle

用于生成 SF4/5 管理页面的简单框架。

1.1.5 2020-11-24 23:47 UTC

This package is auto-updated.

Last update: 2024-09-25 08:06:28 UTC


README

用于生成 SF4/5 管理的简单框架。允许通过为每个实体创建基本实体、服务、仓库和控制器类来创建管理实体。

比使用 Sonata 等管理生成器需要更多编码,但通过摒弃复杂的配置器,使用简单、易于覆盖和扩展的类,提供了更大的灵活性。

## 安装

需要 AdminBundle

composer require ns/admin-bundle

将其添加到项目的 bundles.php 文件中

NS\AdminBundle\NSAdminBundle::class => ['all' => true],

并在项目的 routes.yaml 文件中引入路由配置

ns_admin:
    resource: "@NSAdminBundle/Resources/config/routing.yml"
    prefix:  /admin

创建你的实体,并扩展 AdminSoftDeletableEntity。请记住定义一个 __toString() 方法

class FooBar extends NS\AdminBundle\Entity\AdminSoftDeletableEntity
{
    public function __toString()
    {
        return 'somestring';
    }
}

如果不需要软删除功能,也可以扩展 BaseAdminEntity

创建实体仓库,扩展 AbstractAdminManagedRepository 并定义构造函数

class FooBarRepository extends NS\AdminBundle\Repository\AbstractAdminManagedRepository
{
    public function __construct(Doctrine\Persistence\ManagerRegistry $registry)
    {
        parent::__construct($registry, FooBar::class);
    }
}

创建实体服务,扩展 AdminService 并定义 getClass() 方法

class FooBarService extends NS\AdminBundle\Service\AdminService
{
    public function getClass(): string
    {
        return FooBar::class;
    }
}

为你的实体创建编辑表单

class FooBarEditType extends Symfony\Component\Form\AbstractType
{
    public function buildForm()
    {
        //...
    }
}

为你的实体创建管理列表模板,扩展 '@NSAdmin/list.html.twig'。定义以下块

  • model_create_icon
  • list_column_headers
  • list_row 块

如果使用“查看”页面而不是直接从列表转到编辑表单,则覆盖 view_button,取消注释按钮代码,并根据需要修改,然后创建查看模板并扩展 '@NSAdmin/view.html.twig'

为你的实体创建管理控制器,扩展 AbstractAdminController 并定义以下方法

class FoobarAdminController extends NS\AdminBundle\Controller\AbstractAdminController
{
    public function __construct(FooBarService $admin_service)
    {
        parent::__construct($admin_service);
    }
    
    protected function getEditFormClass(): string
    {
        return FooBarEditType::class;
    }
    
    protected function getListTemplate(): string
    {
        return 'path/to/list.html.twig';
    }

    //Only needed if using a view template:
    protected function getViewTemplate(): string
    {
        return 'path/to/view.html.twig';
    }

}

内置路由将自动将请求路由到格式为 %Entityclass%AdminController 的控制器,其中 %Entityclass% 是你的实体类名的首字母大写形式。

{{ path('admin_model_index', {'_admin_model'=>'foobar'}) }}

对于我们的 FooBar 例子,和 FoobarAdminController 管理控制器类将自动路由到;FoobarAdminController 将需要手动路由。

要在 ColorAdminBundle 中添加条目到 MenuBuilder,使用参数 ['route' => 'admin_model_index', 'routeParameters' => ['_admin_model' => 'foobar']]