表格

编辑本页

表格

在构建控制台应用程序时,显示表格数据可能很有用:

1 2 3 4 5 6 7 8
+---------------+--------------------------+------------------+ | ISBN | |作者  | +---------------+--------------------------+------------------+ | 99921-58-10-7 |神曲|但丁| | 9971-5-0210-0 |双城记查尔斯·狄更斯| | | 960-425-059-0 |《魔戒》| j·r·r·托尔金| | 80-902734-1-6 |无人生还|阿加莎·克里斯蒂  | +---------------+--------------------------+------------------+

要显示表格,使用表格,设置标题,设置行,然后渲染表:

12 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
使用ob娱乐下载组件控制台命令命令使用ob娱乐下载组件控制台助手表格使用ob娱乐下载组件控制台输入InputInterface使用ob娱乐下载组件控制台输出OutputInterface/ /……SomeCommand扩展命令公共函数执行(InputInterface输入, OutputInterface输出int表格表(输出);表格->setheader ([“ISBN”“标题”“作者”])->setRows ([[“99921-58-10-7”“神曲”“但丁的]、[“9971-5-0210-0”《双城记》查尔斯·狄更斯的]、[“960-425-059-0”《指环王》j·r·r·托尔金]、[“80-902734-1-6”《无人生还》阿加莎·克里斯蒂的],]);表格->呈现();返回命令::成功;}}

的实例,可以在输出中的任何位置添加表分隔符TableSeparator作为一行:

1 2 3 4 5 6 7 8 9
使用ob娱乐下载组件控制台助手TableSeparator表格->setRows ([[“99921-58-10-7”“神曲”“但丁的]、[“9971-5-0210-0”《双城记》查尔斯·狄更斯的],TableSeparator (), (“960-425-059-0”《指环王》j·r·r·托尔金]、[“80-902734-1-6”《无人生还》阿加莎·克里斯蒂的)));
1 2 3 4 5 6 7 8 9
+---------------+--------------------------+------------------+ | ISBN | |作者  | +---------------+--------------------------+------------------+ | 99921-58-10-7 |神曲|但丁| | 9971-5-0210-0 |双城记|查尔斯·狄更斯  | +---------------+--------------------------+------------------+ | 960-425-059-0 |《魔戒》| j·r·r·托尔金| | 80-902734-1-6 |无人生还|阿加莎·克里斯蒂|+---------------+--------------------------+------------------+

你可以选择在表格的顶部和底部显示标题:

1 2 3 4
/ /……表格->setHeaderTitle (“书”);表格->setFooterTitle (“页1/2”);表格->呈现();
1 2 3 4 5 6 7 8 9
+---------------+----------- 书  --------+------------------+ | ISBN | |作者  | +---------------+--------------------------+------------------+ | 99921-58-10-7 |神曲|但丁| | 9971-5-0210-0 |双城记|查尔斯·狄更斯  | +---------------+--------------------------+------------------+ | 960-425-059-0 |《魔戒》| j·r·r·托尔金| | 80-902734-1-6 |无人生还|阿加莎·克里斯蒂  | +---------------+--------- 1/2页-------+------------------+

默认情况下,根据列的内容自动计算列的宽度。使用setColumnWidths ()方法显式设置列宽度:

1 2 3
/ /……表格->setColumnWidths ([10030.]);表格->呈现();

在本例中,第一列宽度为10,最后一列宽度为30.并且第二列宽度将自动计算,因为0价值。

属性为每一列单独设置宽度setColumnWidth ()方法。它的第一个参数是列索引(从0),第二个参数是列的宽度:

1 2 3 4
/ /……表格->setColumnWidth (010);表格->setColumnWidth (230.);表格->呈现();

该命令的输出将是:

1 2 3 4 5 6 7 8 9
+---------------+--------------------------+--------------------------------+ | ISBN | |作者  | +---------------+--------------------------+--------------------------------+ | 99921-58-10-7 |神曲|但丁| | 9971-5-0210-0 |双城记|查尔斯·狄更斯  | +---------------+--------------------------+--------------------------------+ | 960-425-059-0 |《魔戒》| j·r·r·托尔金| | 80-902734-1-6 |无人生还|阿加莎·克里斯蒂|+---------------+--------------------------+--------------------------------+

请注意,定义的列宽度总是被视为最小列宽度。如果内容不合适,则将给定的列宽度增加到最长的内容长度。这就是为什么在前面的例子中第一列有13字符长度虽然由用户定义10因为它的宽度。

如果希望将长内容换行到多行中,请使用setColumnMaxWidth ()方法:

1 2 3 4
/ /……表格->setColumnMaxWidth (05);表格->setColumnMaxWidth (110);表格->呈现();

该命令的输出将是:

1 2 3 4 5 6 7 8
+-------+------------+--------------------------------+ | ISBN | |作者  | +-------+------------+--------------------------------+ | 99921 |神圣Com |但丁| | 58-1 edy | | | |鹿  | | | | ( 剩余的行 ...) | +-------+------------+--------------------------------+

默认情况下,表内容水平显示。方法更改此行为setVertical ()方法:

1 2 3
/ /……表格->setVertical ();表格->呈现();

该命令的输出将是:

1 2 3 4 5 6 7 8 9
+------------------------------+ | ISBN: 99921-58-10-7 | |标题:神曲| |作者:但丁  | |------------------------------| | ISBN: 9971-5-0210-0 | |标题:《双城记》| |作者:查尔斯·狄更斯  | +------------------------------+

6.1

Symfony 6.1中引入了对垂直呈现的支持。ob娱乐下载

表格样式可以通过更改为任何内置样式setStyle ()

1 2 3 4 5 6
//与不调用相同表格->setStyle (“默认”);//将默认样式更改为紧凑样式表格->setStyle (“紧凑”);表格->呈现();

这段代码的结果是:

1 2 3 4 5
ISBN书名作者:神曲但丁·阿利吉耶里《双城记》查尔斯·狄更斯《指环王》j·r·r·托尔金《无人后踪》阿加莎·克里斯蒂

也可以将样式设置为无边界的

1 2
表格->setStyle (“无边界”);表格->呈现();

输出:

1 2 3 4 5 6 7 8
=============== ========================== ================== ISBN标题作者  =============== ========================== ================== 99921-58-10-7神曲但丁99921-58-10-7双城记查尔斯·狄更斯960-425-059-0《魔戒》j·r·r·托尔金80-902734-1-6无人生还阿加莎·克里斯蒂  =============== ========================== ==================

也可以将样式设置为盒子

1 2
表格->setStyle (“盒子”);表格->呈现();

输出:

1 2 3 4 5 6 7 8
┌───────────────┬──────────────────────────┬──────────────────┐│ISBN│││标题作者├───────────────┼──────────────────────────┼──────────────────┤99921-58-10-7│││但丁神曲│││9971-5-0210-0双城记查尔斯·狄更斯││││960-425-059-0《魔戒》│j·r·r·托尔金│││80-902734-1-6无人生还│阿加莎·克里斯蒂│└───────────────┴──────────────────────────┴──────────────────┘

也可以将样式设置为box-double

1 2
表格->setStyle (“box-double”);表格->呈现();

输出:

1 2 3 4 5 6 7 8
╔═══════════════╤══════════════════════════╤══════════════════╗║║ISBN││标题作者╠═══════════════╪══════════════════════════╪══════════════════╣║99921-58-10-7││但丁神曲║║9971-5-0210-0│双城记│查尔斯·狄更斯║║960-425-059-0│《魔戒》│j·r·r·托尔金║║80-902734-1-6│无人生还│阿加莎·克里斯蒂║╚═══════════════╧══════════════════════════╧══════════════════╝

如果内置样式不符合你的需要,定义你自己的样式:

12 3 4 5 6 7 8 9 10 11 12 13 14
使用ob娱乐下载组件控制台助手TableStyle//默认情况下,这是基于默认样式tableStyleTableStyle ();//自定义样式tableStyle->setHorizontalBorderChars (' < fg =红色> | < / > '->setVerticalBorderChars (' < fg =品红> - < / > '->setDefaultCrossingChar (' ');//为这个表使用自定义样式表格->setStyle (tableStyle);

下面是一个完整的列表,你可以自定义:

提示

你也可以全局注册一个样式:

1 2 3 4 5
//在彩色名称下注册样式表格::setStyleDefinition (“丰富多彩”tableStyle);//为给定的表应用自定义样式表格->setStyle (“丰富多彩”);

此方法也可用于覆盖内置样式。

除了内置的表格样式,您还可以通过将不同的样式应用到每个表格单元格TableCellStyle

12 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
使用ob娱乐下载组件控制台助手表格使用ob娱乐下载组件控制台助手TableCellStyle表格表(输出);表格->setRows ([[“978 - 0804169127”TableCell (“神曲”, (“风格”= >TableCellStyle ([“对齐”= >“中心”“成品”= >“红色”“bg”= >“绿色”/ /或“cellFormat”= >' <信息> % s < /信息>”,]) [)],]);表格->呈现();

跨多列和行

要创建跨多列的表单元格,可以使用TableCell

12 3 4 5 6 7 8 9 10 11 12 13 14
使用ob娱乐下载组件控制台助手表格使用ob娱乐下载组件控制台助手TableCell使用ob娱乐下载组件控制台助手TableSeparator表格表(输出);表格->setheader ([“ISBN”“标题”“作者”])->setRows ([[“99921-58-10-7”“神曲”“但丁的],TableSeparator (), (TableCell (“这个值横跨3列。”, (“colspan”= >3.]),]);表格->呈现();

结果是:

1 2 3 4 5 6 7
+---------------+---------------+-----------------+ | ISBN | |作者  | +---------------+---------------+-----------------+ | 99921-58-10-7 |神曲|但丁  | +---------------+---------------+-----------------+ | 这个值跨度3列。| +---------------+---------------+-----------------+

提示

你可以使用跨越整个表格宽度的标题单元格创建一个多行页面标题:

1 2 3 4 5
表格->setheader ([[TableCell ('主表标题', (“colspan”= >3.])]、[“ISBN”“标题”“作者”)));/ /……

这个生成:

1 2 3 4 5 6 7
+-------+-------+--------+ | 主要表标题  | +-------+-------+--------+ | ISBN | |作者  | +-------+-------+--------+ | ...| +-------+-------+--------+

以类似的方式可以跨多行:

12 3 4 5 6 7 8 9 10 11 12 13 14 15 16
使用ob娱乐下载组件控制台助手表格使用ob娱乐下载组件控制台助手TableCell表格表(输出);表格->setheader ([“ISBN”“标题”“作者”])->setRows ([[“978 - 0521567817”“论帝制》”TableCell (《但丁跨越多行》, (“行宽”= >2),], [“978 - 0804169127”“神曲”],]);表格->呈现();

这个输出:

1 2 3 4 5 6
+----------------+---------------+---------------------+ | ISBN | |作者  | +----------------+---------------+---------------------+ | 978 - 0521567817 |论帝制》|但丁| | 978 - 0804169127 |神曲|跨越多个行  | +----------------+---------------+---------------------+

您可以使用colspan而且行宽选项,这允许您创建任何表的布局,您可能希望。

修改呈现的表

呈现()方法需要传递整个表内容。但是,有时这些信息事先是不可用的,因为它是动态生成的。在这些情况下,使用appendRow ()方法的参数与addRow ()方法,以在已呈现的表的底部添加行。

附加行的唯一要求是表必须在控制台输出部分

12 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
使用ob娱乐下载组件控制台助手表格/ /……SomeCommand扩展命令公共函数执行(InputInterface输入, OutputInterface输出int部分输出->节();表格表(部分);表格->addRow ([“爱”]);表格->呈现();表格->appendRow ([Sob娱乐下载ymfony的]);返回命令::成功;}}

这将在终端中显示以下表格:

1 2 3 4
+---------+ |爱| | Symfoob娱乐下载ny | +---------+
此工作,包括代码示例,是根据创作共用BY-SA 3.0许可证。
ob娱乐下载Symfony 6.2支持通过苏禄人
ob娱乐下载Symfony 6.2支持通过Les-Tilleuls.coop