kreyu / data-table-bundle
简化数据表创建过程
Requires
- php: ^8.1
- symfony/form: ^6.0|^7.0
- symfony/framework-bundle: ^6.0|^7.0
- symfony/mime: ^6.0|^7.0
- symfony/translation: ^6.0|^7.0
- symfony/twig-bundle: ^6.0|^7.0
- symfony/validator: ^6.0|^7.0
- twig/extra-bundle: ^3.6
- twig/intl-extra: ^3.6
Requires (Dev)
- dg/bypass-finals: dev-master
- doctrine/doctrine-bundle: ^2.9
- doctrine/orm: ^2.15
- friendsofphp/php-cs-fixer: ^3.49
- kubawerlos/php-cs-fixer-custom-fixers: ^3.11
- openspout/openspout: ^4.23
- phpoffice/phpspreadsheet: ^1.28
- phpstan/phpstan: ^1.10
- phpunit/phpunit: ^10.4
- roave/security-advisories: dev-latest
- symfony/http-foundation: ^6.0|^7.0
- symfony/maker-bundle: ^1.48
- symfony/security-core: ^6.2|^7.0
- dev-main
- v0.22.1
- v0.22.0
- v0.21.4
- v0.21.3
- v0.21.2
- v0.21.1
- v0.21.0
- v0.20.1
- v0.20.0
- v0.19.2
- v0.19.1
- v0.19.0
- v0.18.1
- v0.18.0
- v0.17.12
- v0.17.11
- v0.17.10
- v0.17.9
- v0.17.8
- v0.17.7
- v0.17.6
- v0.17.5
- v0.17.4
- v0.17.3
- v0.17.2
- v0.17.1
- v0.17.0
- v0.16.3
- v0.16.2
- v0.16.1
- v0.16.0
- v0.15.4
- v0.15.3
- v0.15.2
- v0.15.1
- v0.15.0
- v0.14.4
- v0.14.3
- v0.14.2
- v0.14.1
- v0.14.0
- v0.13.1
- v0.13.0
- v0.12.2
- v0.12.1
- v0.12.0
- v0.11.1
- v0.11.0
- v0.10.12
- v0.10.11
- v0.10.10
- v0.10.9
- v0.10.8
- v0.10.7
- v0.10.6
- v0.10.5
- v0.10.4
- v0.10.3
- v0.10.2
- v0.10.1
- v0.10.0
- v0.9.3
- v0.9.2
- v0.9.1
- 0.9.0
- v0.8.0
- v0.7.2
- v0.7.1
- v0.7.0
- v0.6.0
- v0.5.3
- v0.5.2
- v0.5.1
- v0.5.0
- v0.4.0
- v0.3.6
- v0.3.5
- v0.3.4
- v0.3.3
- v0.3.2
- v0.3.1
- v0.3.0
- v0.2.3
- v0.2.2
- v0.2.1
- v0.2.0
- v0.1.0
- dev-profiler-improvements
- dev-feature/url-oriented-improvements
- dev-feature/persistence-stimulus-controller
- dev-fix/traceable-data-table-factory-named
- dev-feature/theming-improvements
- dev-feature/gh-57
- dev-feature/gh-100
- dev-docs/enum-column-type-docs
- dev-feature/cleanup
- dev-bugfix/72-2
- dev-bugfix/72
- dev-feature/exporting-refactor
- dev-feature/column-rendering-unit-tests
- dev-feature/i18n-todo
This package is auto-updated.
Last update: 2024-09-22 14:52:10 UTC
README
简化在Symfony应用程序中创建数据表的过程。
警告
此包仍处于开发初期阶段,可能将会发生改变,甚至可能发生重大改变。它不是生产就绪的,并且在第一个稳定版本发布之前,不保证向后兼容性。
文档
查看官方文档。
特性
- 类型类,用于基于类的配置,类似于Symfony表单组件
- 排序、过滤和分页——数据表的经典三要素
- 个性化,用户可以决定列的顺序和可见性
- 持久性,保存应用的数据(例如过滤条件)在请求之间
- 导出,可以选择是否应用分页、过滤和个性化
- 主题化,使用Twig对包的每个部分进行主题化
- 数据源无关性,支持Doctrine ORM开箱即用
- 异步性,得益于与Hotwire Turbo的集成
用例
想象一个包含许多列表的应用程序,例如产品、分类、标签、客户等。在大多数情况下,我们返回一个数据列表到视图,并直接在Twig中进行渲染。现在,想象一下,分类详情视图应显示其自己的产品列表。一段时间后,客户要求对表格进行排序和过滤。
随着系统的增长,这会变得越来越难以维护。使用此包,您可以定义每个实体的数据表,包括它们的列、过滤器、操作和导出器,每个都使用一个简单的PHP类。重复使用数据表(及其组件)与使用Symfony表单组件重复使用表单一样简单。
但是,如果您正在使用像SonataAdminBundle或EasyAdminBundle这样的管理面板生成器,您绝对不需要此包。那些生成器已经以自己的方式涵盖了数据表的定义。
有时应用程序足够复杂,以至于管理员生成器要么太简单,要么太有限。这就是此包大放异彩的地方——您可以在委派所有数据表相关的工作给包的同时,构建一个完全定制的应用程序。
与表单组件的相似性
所有设计都旨在对使用过Symfony表单组件的Symfony开发者友好。
注意
这些组件之间有很多相似之处——甚至包括源代码!正因为如此,使用这个包以及贡献内容都应该是很容易的。
感谢所有为Symfony Form 组件的创造者和贡献者,因为他们提出了这种基于类型的配置理念,而这个包只是遵循了它的原则。
尽管如此,因为Form组件可以在框架之外使用,而这个包只作为Symfony包工作,所以核心尽可能简化。
数据表及其组件——列、过滤器、操作和导出器——使用类型类定义,就像表单一样
class ProductDataTableType extends AbstractDataTableType { public function buildDataTable(DataTableBuilderInterface $builder, array $options): void { $builder ->addColumn('id', NumberColumnType::class) ->addColumn('name', TextColumnType::class); $builder ->addFilter('id', NumericFilterType::class) ->addFilter('name', StringFilterType::class); $builder ->addAction('create', ButtonActionType::class) ->addRowAction('update', ButtonActionType::class) ->addBatchAction('delete', ButtonActionType::class); $builder ->addExporter('csv', CsvExporterType::class) ->addExporter('xlsx', XlsxExporterType::class); } }
使用这些类型类创建数据表看起来也可能非常熟悉
class ProductController extends AbstractController { use DataTableFactoryAwareTrait; public function index(Request $request): Response { $dataTable = $this->createDataTable(ProductDataTableType::class, $query); $dataTable->handleRequest($request); return $this->render('product/index.html.twig', [ 'products' => $dataTable->createView(), ]) } }
在Twig中渲染数据表就像执行一个单一函数一样简单
{# templates/product/index.html.twig #} <div class="card"> {{ data_table(products, { title: 'Products' }) }} </div>
许可证
MIT许可证(MIT)。有关更多信息,请参阅许可证文件。