Symfony 4.1 Console组件 的一个主要功能就是 高级output 控制,可以让你同时更新outputs的不同部分。但是,我们也改进了Console 命令行的其他微小地方。
自动运行建议的命令
Contributed by
Pierre du Plessis
in #25732.
在 Symfony 中,当你输错了命令的名字时,你会看到错误信息和一个拥有相似名称的命令列表。在 Symfony 4.1 中,当只有一个可选命令时,你拥有一个立即执行的选项:
1 2 3 4 | $ ./bin/console app:user:impot
Command "app:user:impot" not defined.
Do you want to run "app:user:import" instead? [y/n] |
新表格样式
Contributed by
Dany Maillard
in #25301
and #26693.
在 Symfony 4.1 中,作为命令行一部分而输出的表格可以选择两个名为 box
和 box-double
的新样式:
1 2 | $table->setStyle('box');
$table->render(); |
1 2 3 4 5 6 7 8 | ┌───────────────┬──────────────────────────┬──────────────────┐
│ ISBN │ Title │ Author │
├───────────────┼──────────────────────────┼──────────────────┤
│ 99921-58-10-7 │ Divine Comedy │ Dante Alighieri │
│ 9971-5-0210-0 │ A Tale of Two Cities │ Charles Dickens │
│ 960-425-059-0 │ The Lord of the Rings │ J. R. R. Tolkien │
│ 80-902734-1-6 │ And Then There Were None │ Agatha Christie │
└───────────────┴──────────────────────────┴──────────────────┘ |
1 2 | $table->setStyle('box-double');
$table->render(); |
1 2 3 4 5 6 7 8 | ╔═══════════════╤══════════════════════════╤══════════════════╗
║ ISBN │ Title │ Author ║
╠═══════════════╪══════════════════════════╪══════════════════╣
║ 99921-58-10-7 │ Divine Comedy │ Dante Alighieri ║
║ 9971-5-0210-0 │ A Tale of Two Cities │ Charles Dickens ║
║ 960-425-059-0 │ The Lord of the Rings │ J. R. R. Tolkien ║
║ 80-902734-1-6 │ And Then There Were None │ Agatha Christie ║
╚═══════════════╧══════════════════════════╧══════════════════╝ |
自定义表格的新方法
Contributed by
Dany Maillard
in #25456.
除了新的表格样式,在 Symfony 4.1 中我们降格了一些方法 (setHorizontalBorderChar()
, setVerticalBorderChar()
, setCrossingChar()
),以便引入更强力的方法来让你自定义每一个用于绘制表格边框的字符。
例如,全新的 setCrossingChars()
可以定制9种不同的边框字符:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | public function setCrossingChars(
string $cross, string $topLeft, string $topMid, string $topRight,
string $midRight, string $bottomRight, string $bottomMid,
string $bottomLeft, string $midLeft
);
// * 1---------------2-----------------------2------------------3
// | ISBN | Title | Author |
// 8---------------0-----------------------0------------------4
// | 99921-58-10-7 | Divine Comedy | Dante Alighieri |
// | 9971-5-0210-0 | A Tale of Two Cities | Charles Dickens |
// | 960-425-059-0 | The Lord of the Rings | J. R. R. Tolkien |
// 7---------------6-----------------------6------------------5
// @param string $cross Crossing char (see #0 of example)
// @param string $topLeft Top left char (see #1 of example)
// @param string $topMid Top mid char (see #2 of example)
// @param string $topRight Top right char (see #3 of example)
// @param string $midRight Mid right char (see #4 of example)
// @param string $bottomRight Bottom right char (see #5 of example)
// @param string $bottomMid Bottom mid char (see #6 of example)
// @param string $bottomLeft Bottom left char (see #7 of example)
// @param string $midLeft Mid left char (see #8 of example) |
增加对 outputting iterators 输出迭代器的支持
Contributed by
Tobias Schultze and
Maxime Steinhausser
in #26847
and #26863.
在 Symfony 4.1 中,命令行的 write()
和了writeln()
方法
(也包括 SymfonyStyle output) 支持传入返回字符串的iterator:
1 2 3 4 5 6 7 8 9 10 11 | private function generateMessages(): iterable
{
yield 'foo';
yield 'bar';
}
// ...
$output->writeln($this->generateMessages());
// Output will be:
// foo\n
// bar\n |