sherlockode / crud-bundle
用于生成 CRUD 的包
v0.1.1
2024-03-14 10:17 UTC
Requires
- php: ^7.4 || ^8.0
- knplabs/knp-paginator-bundle: ^5.0 || ^6.0
- symfony/form: ^5.0 || ^6.0
- symfony/framework-bundle: ^5.0 || ^6.0
- symfony/twig-bundle: ^5.0 || ^6.0
- twig/twig: ^2.0 || ^3.0
This package is auto-updated.
Last update: 2024-09-14 11:18:12 UTC
README
概述
本包生成基本的 CRUD。
安装
使用 composer 安装此包
$ composer require sherlockode/crud-bundle
生成基本网格视图
# config/packages/sherlockode_crud.yaml sherlockode_crud: crud: user: config: class: App\Entity\User form: App\Form\Type\UserType grid: fields: name: label: crud.user.name #translation key surname: label: crud.user.surname is_active: label: crud.user.active type: boolean # you can define a specific type if you need. See the section bellow created_at: label: crud.user.created_at type: date options: format: d-m-Y # you can customise the date format actions: update: ~ delete: ~ settings: page_size: 20 #the number of elements by page, 20 by default
# sherlockode_crud_routing.yaml app_admin_user: resource: | base_name: sherlockode_crud resource_name: user type: sherlockode_crud.resource prefix: /admin
自定义
需要自定义操作或字段?您可以轻松地定义自己的
# config/packages/sherlockode_crud.yaml sherlockode_crud: templates: action: up_and_down: '@SherlockodeCrud/common/grid/action/up_and_down.html.twig' field: custom_field: '@SherlockodeCrud/common/grid/field/custom_field.html.twig' # now, you can use them like this : crud: user: # ... grid: fields: surname: label: crud.user.email type: custom_field actions: up_and_down: ~
您需要在网格中用对象而不是属性值?
# config/packages/sherlockode_crud.yaml sherlockode_crud: crud: user: # ... grid: fields: surname: label: crud.user.email path: . #use '.' to send the object instead of the property value
您需要在网格上添加过滤器?
# config/packages/sherlockode_crud.yaml sherlockode_crud: crud: user: # ... grid: filters: name: type: string label: Label or custom translation key
您需要为网格创建自定义查询?
# config/packages/sherlockode_crud.yaml sherlockode_crud: crud: user: # ... grid: repository: method: yourQueryBuilder
- 在此示例中,在 UserRepository 中,您需要一个名为
yourQueryBuilder
的函数 yourQueryBuilder
函数需要返回一个QueryBuilder
对象
您需要过滤器?
该包具有基本的过滤器
- 字符串
- 布尔值
- 浮点数
- 货币
- 日期
- 日期范围
- 实体
实体过滤器需要更多配置
# config/packages/sherlockode_crud.yaml sherlockode_crud: crud: user: # ... grid: filters: category: type: entity options: class: App\Entity\Category choice_label: name
要添加一些过滤器
# config/packages/sherlockode_crud.yaml sherlockode_crud: crud: user: # ... grid: filters: name: type: string #the filter name createdAt: type: date_range
您需要自定义过滤器?
如果您需要一个不存在的过滤器,创建它!
创建您自己的过滤器类和过滤器类型类,在此示例中为 MyCustomFilter
。 MyCustomFilter
需要实现 FilterInterface
现在您需要设置新过滤器模板
# config/packages/sherlockode_crud.yaml sherlockode_crud: templates: filter: my_custom_filter: 'Grid\Filter\my_custom_filter.html.twig' crud: user: # ... grid: filters: name: type: my_custom_filter
您需要对网格进行排序?
# config/packages/sherlockode_crud.yaml sherlockode_crud: crud: user: # ... grid: sorting: name: asc surname: desc
您需要让用户选择排序顺序?
# config/packages/sherlockode_crud.yaml sherlockode_crud: crud: user: grid: fields: name: label: crud.user.email sortable: ~ #set the column sortable
您需要更改资源创建或编辑后的重定向?
# sherlockode_crud_routing.yaml app_admin_user: resource: | redirect_after_create: index redirect_after_update: update base_name: sherlockode_crud resource_name: user type: sherlockode_crud.resource prefix: /admin
默认情况下,在资源创建或编辑后,您将被重定向到更新操作
您需要为路由创建自定义模板?
# sherlockode_crud_routing.yaml app_admin_user: resource: | base_name: sherlockode_crud resource_name: user templates: "User" type: sherlockode_crud.resource prefix: /admin
- 在您的模板项目文件夹中,请确保您有
User
目录。 - 如果您只需要为索引操作创建自定义模板,请命名为
index.html.twig
,其他路由将使用默认模板渲染
您只想创建索引路由,而不是所有路由?
# sherlockode_crud_routing.yaml app_admin_user: resource: | base_name: sherlockode_crud resource_name: user only: [index] type: sherlockode_crud.resource prefix: /admin
您想创建所有路由(除了删除)?
# sherlockode_crud_routing.yaml app_admin_user: resource: | base_name: sherlockode_crud resource_name: user except: [delete] type: sherlockode_crud.resource prefix: /admin
您需要在操作之前检查权限?
# sherlockode_crud_routing.yaml app_admin_user: resource: | base_name: sherlockode_crud resource_name: user permission: true type: sherlockode_crud.resource prefix: /admin
现在为每个操作创建自己的投票者
- 索引
- 创建
- 编辑
- 删除
属性以 resource_name
为前缀。在此示例中,它是 user_index
您想发送一些变量?
# sherlockode_crud_routing.yaml app_admin_user: resource: | base_name: sherlockode_crud resource_name: user vars: global: icon: bi bi-person-fill
在此示例中,我们向所有路径发送一个图标。
如果您只想针对特定路径执行此操作
# sherlockode_crud_routing.yaml app_admin_user: resource: | base_name: sherlockode_crud resource_name: user vars: index: icon: bi bi-person-fill
您需要删除删除确认页面?
# config/packages/sherlockode_crud.yaml sherlockode_crud: crud: user: config: delete_confirmation: false
您需要在显示视图中添加一些信息?
# config/packages/sherlockode_crud.yaml sherlockode_crud: crud: user: show: name: type: string is_active: type: boolean category.name: type: string created_at: type: date options: format: d-m-Y
您需要更改翻译域?
# config/packages/sherlockode_crud.yaml sherlockode_crud: translation_domain: yourDomain
您需要禁用翻译域?
# config/packages/sherlockode_crud.yaml sherlockode_crud: translation_domain: false crud: user: # ... grid: fields: name: label: My Name #you can use a translation key or the label value if translation domain is false
如果您需要更具体,您可以禁用翻译或为某些网格设置自定义翻译域
# config/packages/sherlockode_crud.yaml sherlockode_crud: crud: user: config: translation_domain: false #or yourDomain
如果您为网格设置了翻译域,则该值将替换全局值
您需要向视图发送数据?
在 ResourceControllerDataEvent 中,您有多个操作
- ResourceControllerDataEvent::SHOW
- ResourceControllerDataEvent::CREATE
- ResourceControllerDataEvent::UPDATE
- ResourceControllerDataEvent::DELETE_CONFIRMATION
在 ResourceController,在显示、创建、更新和删除确认操作中,在页面渲染之前会触发一个事件。
如果您需要向视图发送数据,您可以创建一个监听器。
# src/EventListener/ResourceListener.php class ResourceListener implements EventSubscriberInterface { public static function getSubscribedEvents(): array { return [ ResourceControllerDataEvent::UPDATE => 'update', ]; } public function update(ResourceControllerDataEvent $event): void { // send custom data to the view $event->setData([]); } }
在视图中,数据变量将包含您在上例中发送的数据。
您需要阻止刷新?
在 ResourceControllerEvent 中,您有多个操作
- ResourceControllerEvent::BEFORE_CREATE
- ResourceControllerEvent::BEFORE_UPDATE
- ResourceControllerEvent::BEFORE_DELETE
在ResourceController中,在创建、更新和删除操作中,在执行flush之前会触发一个事件。
如果您需要取消flush,可以创建一个监听器
# src/EventListener/ResourceListener.php class ResourceListener implements EventSubscriberInterface { public static function getSubscribedEvents(): array { return [ ResourceControllerEvent::BEFORE_UPDATE => 'update', ]; } public function update(ResourceControllerDataEvent $event): void { $event->setCancelProcess(true); // optional message, by default, a translation key is generated // sherlockode_crud.crud_name.update.cancel $event->setMessage('your message'); } }