eznio / tabler
CLI ASCII 表格绘制器
1.0.3
2017-06-07 04:02 UTC
Requires
- php: >=5.4.0
- eznio/ar: *
- eznio/styler: *
Requires (Dev)
- phpunit/phpunit: ~5.0
This package is not auto-updated.
Last update: 2024-09-14 19:36:48 UTC
README
概述
简单的(最初)辅助工具,可格式化和渲染 CLI 工具的 ASCII 表格。
基本用法
$tabler = (new \eznio\tabler\Tabler()) ->setHeaders(['a' => 'Column A', 'b' => 'Column B', 'c' => 'Column C']) ->setData([ ['a' => '123', 'b' => '456', 'c' => '7'], ['a' => '123', 'b' => '456', 'c' => '7'], ['a' => '123', 'b' => '456', 'c' => '7'] ]) ->setRenderer(new \eznio\tabler\renderers\MysqlStyleRenderer());
它会产生
+----------+----------+----------+
| Column A | Column B | Column C |
+----------+----------+----------+
| 123 | 456 | 7 |
| 123 | 456 | 7 |
| 123 | 456 | 7 |
+----------+----------+----------+
基本类和接口
类
Tabler
- 整个包的门面类。包含设置表格数据、生成、样式化和渲染的快捷调用Composer
- 扫描标题和数据数组,收集最大长度,组合列结构并尝试获取缺失的列名LayoutBuilder
- 获取已解析的表格数据的Composer
并生成 TableLayout 结构(-s)(见下文)Styler
- 设置文本行样式(背景颜色、前景颜色、一些文本样式)的辅助工具Element
- TableLayout 结构的基本类
接口
Renderer
- 实现渲染类的接口
表格元素
什么是以及为什么
TableLayout 是一个元结构,代表整个表格及其元素 - 行和单元格。
主要用于样式化。例如,如果我们想以红色显示第 2 列
$layout = $tabler->getTableLayout(); $layout->getHeaderLine()->getHeaderCell('column2') ->setForegroundColor(\eznio\tabler\references\ForegroundColors::RED);
模式
整体元素布局和嵌套
+-----------------------------------------+
| TableLayout |
| |
| +-------------------------------------+ |
| | HeaderLine | |
| | | |
| | +------------+ +------------+ | |
| | | HeaderCell | | HeaderCell | . . . | |
| | +------------+ +------------+ | |
| +-------------------------------------+ |
| |
| +-------------------------------------+ |
| | DataGrid | |
| | | |
| | +---------------------------------+ | |
| | | DataRow | | |
| | | | | |
| | | +----------+ +----------+ | | |
| | | | DataCell | | DataCell | . . . | | |
| | | +----------+ +----------+ | | |
| | +---------------------------------+ | |
| | | |
| | +---------------------------------+ | |
| | | DataRow | | |
| | | | | |
| | | +----------+ +----------+ | | |
| | | | DataCell | | DataCell | . . . | | |
| | | +----------+ +----------+ | | |
| | +---------------------------------+ | |
| | | |
| | . . . | |
| +-------------------------------------+ |
+-----------------------------------------+
简短元素参考
TableLayout
- 整个表格。边框颜色在这里设置HeaderLine
- 包含列标题的第一行HeaderCell
- 单个标题行的单元格。DataGrid
- 整个数据部分DataRow
- 单个数据行DataCell
- 单个数据单元格
获取/设置子元素
- 获取 TableLayout
/** @var Tabler $tabler */ $tableLayout = $tabler->getTableLayout();
- 获取顶部元素
/** @var HeaderLine $headerLine */ $headerLine = $tableLayout->getheaderLine(); /** @var DataGrid $dataGrid */ $dataGrid = $tableLayout->getDataGrid();
- 获取标题行单元格
/** @var HeaderCell $headerCellA */ $headerCellA = $headerLine->getHeaderCell('a');
- 获取数据行和单元格
/** @var DataRow $firstDataRow */ $firstDataRow = $dataGrid->getRow(0); /** @var DataCell $dataCellA */ $dataCellA = $firstDataRow->getCell('a');
门面公共 API 参考
$tabler = new \eznio\tabler\Tabler();
主要部分
-
setData(array $data)
设置表格数据 2 级嵌套数组
- 顶层数组元素被视为行,也应该是数组
- 行元素被视为单元格。它们的数组键是列 ID
-
setHeaders(array $headers)
设置表格标题数组。其元素被视为列标题,其数组键是列 ID。
-
getTableLayout()
返回 TableLayout 结构。如果没有构建,则在返回之前构建。
-
setRenderer(Renderer $renderer)
设置渲染类以渲染表格
-
setGuessHeaderNames(bool $guessHeaderNames)
将 $guessHeaderNames 设置为 true 表示如果未提供标题,则使用列 ID 作为标题标题
如果 $guessHeaderNames 设置为 false,则没有提供标题的列名将渲染为空字符串
-
render(TableLayout $tableLayout = null)
渲染当前(如果没有传递 TableLayout),或给定 TableLayout 组件为表格字符串表示形式并返回它
样式快捷方式
如果需要,描述在源代码中可用
setBorderBackgroundColor($color)
getBorderBackgroundColor()
setBorderForegroundColor($color)
getBorderForegroundColor()
setHeadingLineStyles(array $styles)
getHeadingLineStyles()
setHeadingCellStyles($columnId, array $styles)
getHeadingCellStyles($columnId)
setColumnStyles($columnId, array $styles)
setColumnTextAlignment($columnId, $alignment)
setColumnMinLength($columnId, $minLength)
setColumnLeftPadding($columnId, $leftPadding)
getColumnLeftPadding($columnId)
setColumnRightPadding($columnId, $rightPadding)
getColumnRightPadding($columnId)
setColumnPadding($columnId, $padding)
setRowStyles($rowId, array $styles)
setOddRowsStyles(array $styles)
setEvenRowsStyles(array $styles)
getRowStyles($rowId)
setCellStyles($columnId, $rowId, array $styles)
getCellStyles($columnId, $rowId)
setCellTextAlignment($columnId, $rowId, $alignment)
getCellTextAlignment($columnId, $rowId)
样式化
样式数组
样式可以设置为一个值
$cell->setStyle(ForegroundColors::RED);
或数组
$cell->setStyle([ ForegroundColors::RED, BacgroundColors::WHITE, TextStyles::BOLD ]);
如果从背景或前景颜色设置了多个数组元素,则使用最后一个。文本样式可以自由组合使用。
样式引用类
references\ForegroundColors
references\BackgroundColors
references\TextStyles
样式元素
TableLayout
- 设置边框背景和前景颜色HeaderLine
- 设置整个表头的背景/前景/文本样式,可以在HeaderCell
级别进行覆盖HeaderCell
- 设置单个表头单元格的背景/前景/文本样式、最小长度、文本对齐和内边距,覆盖HeaderLine
级别的设置DataRow
- 设置单个数据行的背景/前景/文本样式和文本对齐,可以在DataCell
中进行覆盖DataCell
- 设置单个数据单元格的背景/前景/文本样式、最小长度、文本对齐和内边距,覆盖DataRow
级别的设置
渲染器
表格数据
本部分示例中将使用以下表格设置
$tabler = (new \eznio\tabler\Tabler()) ->setHeaders(['a' => 'Column A', 'b' => 'Column B', 'c' => 'Column C']) ->setData([ ['a' => '123', 'b' => '456', 'c' => '7'], ['a' => '234', 'b' => '567', 'c' => '8'], ['a' => '345', 'b' => '6789', 'c' => ''] ]);
MySQL风格渲染器
$tabler->setRenderer(new MysqlStyleRenderer());
+----------+----------+----------+
| Column A | Column B | Column C |
+----------+----------+----------+
| 123 | 456 | 7 |
| 234 | 567 | 8 |
| 345 | 6789 | |
+----------+----------+----------+
MC风格渲染器
$tabler->setRenderer(new McStyleRenderer());
╔══════════╦══════════╦══════════╗
║ Column A ║ Column B ║ Column C ║
╠══════════╬══════════╬══════════╣
║ 123 ║ 456 ║ 7 ║
║ 234 ║ 567 ║ 8 ║
║ 345 ║ 6789 ║ ║
╚══════════╩══════════╩══════════╝
"清除"样式渲染器
$tabler->setRenderer(new ClearStyleRenderer());
Column A Column B Column C
123 456 7
234 567 8
345 6789
"单行"样式渲染器
$tabler->setRenderer(new SingleLineRenderer());
┌──────────┬──────────┬──────────┐
│ Column A │ Column B │ Column C │
├──────────┼──────────┼──────────┤
│ 123 │ 456 │ 7 │
│ 234 │ 567 │ 8 │
│ 345 │ 6789 │ │
└──────────┴──────────┴──────────┘
更激进的示例
$tabler = (new \eznio\tabler\Tabler()) ->setHeaders(['a' => 'Column A', 'b' => 'Column B', 'c' => 'Column C']) ->setData([ ['a' => '123', 'b' => '456', 'c' => '7'], ['a' => '234', 'b' => '567', 'c' => '8'], ['a' => '345', 'b' => '6789', 'c' => ''] ]) ->setRenderer(new \eznio\tabler\renderers\SingleLineRenderer()) ->setGuessHeaderNames(false); $layout = $tabler->getTableLayout(); $layout->getHeaderLine()->getHeaderCell('a') ->setTextAlignment(\eznio\tabler\references\TextAlignments::TEXT_ALIGN_LEFT) ->setForegroundColor(\eznio\styler\references\ForegroundColors::RED); $layout->getHeaderLine()->getHeaderCell('b') ->setTextAlignment(\eznio\tabler\references\TextAlignments::TEXT_ALIGN_CENTER) ->setForegroundColor(\eznio\styler\references\ForegroundColors::YELLOW); $layout->getHeaderLine()->getHeaderCell('c') ->setTextAlignment(\eznio\tabler\references\TextAlignments::TEXT_ALIGN_RIGHT) ->setForegroundColor(\eznio\styler\references\ForegroundColors::GREEN); $layout->getDataGrid()->getRow(1)->getCell('c') ->setTextAlignment(\eznio\tabler\references\TextAlignments::TEXT_ALIGN_CENTER); echo $tabler->render($layout);