表格
编辑本页表格
在构建控制台应用程序时,显示表格数据可能很有用:
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 ([10,0,30.]);$表格->呈现();
在本例中,第一列宽度为10
,最后一列宽度为30.
并且第二列宽度将自动计算,因为0
价值。
属性为每一列单独设置宽度setColumnWidth ()方法。它的第一个参数是列索引(从0
),第二个参数是列的宽度:
1 2 3 4
/ /……$表格->setColumnWidth (0,10);$表格->setColumnWidth (2,30.);$表格->呈现();
该命令的输出将是:
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 (0,5);$表格->setColumnMaxWidth (1,10);$表格->呈现();
该命令的输出将是:
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;//默认情况下,这是基于默认样式$tableStyle=新TableStyle ();//自定义样式$tableStyle->setHorizontalBorderChars (' < fg =红色> | < / > ')->setVerticalBorderChars (' < fg =品红> - < / > ')->setDefaultCrossingChar (' ');//为这个表使用自定义样式$表格->setStyle ($tableStyle);
下面是一个完整的列表,你可以自定义:
- setPaddingChar ()
- setHorizontalBorderChars ()
- setVerticalBorderChars ()
- setCrossingChars ()
- setDefaultCrossingChar ()
- setCellHeaderFormat ()
- setCellRowFormat ()
- setBorderFormat ()
- setPadType ()
提示
你也可以全局注册一个样式:
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 | +---------+