ns / admin-bundle
用于生成 SF4/5 管理页面的简单框架。
Requires
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']]