warslett/table-builder

表格抽象,表格构建,表格渲染

0.2.2 2022-04-18 14:34 UTC

This package is auto-updated.

Last update: 2024-09-18 20:23:09 UTC


README

Latest Stable Version Build Status codecov Mutation testing badge Psalm coverage Total Downloads License: MIT

表格构建器提供表格抽象、表格构建和表格渲染功能。允许您配置表格,将数据加载到其中,然后以多种方式渲染它们。该软件包可以帮助您实现CRUD应用程序中大多数表格操作的功能,包括分页、排序、行操作、条件格式化和将表格导出为csv。

安装

composer require warslett/table-builder

如果您使用symfony,有一个可选的包可以配置服务

composer require warslett/table-builder-bundle warslett/table-builder

要求

PHP 7.4、8.0或8.1。

文档

完整的文档可以在这里找到。

概述

表格构建

使用各种列类型配置您的表格,或实现您自己的列类型。然后使用我们的数据适配器之一加载数据到表格中,或实现您自己的。使用我们的请求适配器之一处理排序和分页的请求,或实现您自己的。

// Configure the table structure with a range of out the box column types
$tableBuilder = $this->tableBuilderFactory->createTableBuilder()
    ->rowsPerPageOptions([10, 20, 50])
    ->defaultRowsPerPage(10)
    ->add(TextColumn::withProperty('email')
        ->sortable())
    ->add(DateTimeColumn::withProperty('last_login')
        ->format('Y-m-d H:i:s')
        ->sortable())
    ->add(ActionGroupColumn::withName('actions')
        ->add(ActionBuilder::withName('update')
            ->route('user_update', ['id' => 'id'])) // map 'id' parameter to property path 'id'
        ->add(ActionBuilder::withName('delete')
            ->route('user_delete', ['id' => 'id'])
            ->attribute('extra_classes', ['btn-danger'])));

// Build the table object
$table = $tableBuilder->buildTable('users');

// Configure how data will be loaded into the table
$queryBuilder = $this->entityManager->createQueryBuilder()
    ->select('u')
    ->from(User::class, 'u');

$dataAdapter = DoctrineOrmAdapter::withQueryBuilder($queryBuilder)
    ->mapSortToggle('email', 'u.email')
    ->mapSortToggle('last_login', 'u.lastLogin');

$table->setDataAdapter($dataAdapter);

// Uses parameters on the request to load data into the table with sorting and pagination
$table->handleSymfonyRequest($request);

// OR with a Psr7 Request
$table->handlePsr7Request($request);

表格渲染

以抽象方式建模表格,使我们能够提供多种通用的渲染器来渲染它们。

例如,注册了TwigRendererExtension后,您可以将表格在twig模板中渲染如下

<div class="container">
    {{ table(table) }}
</div>

或者如果您不使用twig,可以使用PhtmlRenderer,它使用普通的PHP模板,且没有第三方依赖

use WArslett\TableBuilder\Renderer\Html\PhtmlRenderer;

$renderer = new PhtmlRenderer();
echo $renderer->renderTable($table);

上述两个渲染器都是可主题化的,并附带标准主题和bootstrap4主题。

rendered table

您还可以将表格渲染为CSV文档

use League\Csv\Writer;
use WArslett\TableBuilder\Renderer\Csv\CsvRenderer;

$csvRenderer = new CsvRenderer();
$csvRenderer->renderTable($table, Writer::createFromPath('/tmp/mycsv.csv'));

单页应用

表格还实现了JsonSerializable接口,因此可以在响应中编码为json,并由单页应用消费。

// GET /users/table
return new JsonResponse($table);

依赖项

表格构建器核心依赖项最少,但一些可选功能有额外的依赖项。

  • CsvRenderer和相关类依赖于league/csv
  • TwigRenderer和相关类依赖于twig/twig
  • DoctrineORMAdapter数据适配器依赖于doctrine/orm
  • SymfonyHttpAdapter响应适配器依赖于symfony/http-foundation
  • Psr7Adapter响应适配器依赖于psr/http-message
  • SymfonyRoutingAdapter路由生成适配器依赖于symfony/routing