我正在使用Symfonys 控制台组件,并且正在创建一个命令来显示目录中已执行的文件。为此,我想使用他们的Table helper在 Table 中显示数据。
在他们的文档中,它仅使用带有硬编码输出的示例,是否可以动态添加此数据。这是我的代码:
// Create a new Table object
$table = new Table($output);
// Set the table headers
$table->setHeaders(['Executed', 'File', 'Processed']);
// Create a new Iterator object
$iterator = new FilesystemIterator(dirname(__DIR__) . Config::SCRIPT_PATH);
// Cycle through iterated files
foreach ($iterator as $item) {
// Set the file
$file = (object) [
'executed' => 'No',
'name' => $item->getFilename(),
'processed' => ''
];
// Find the script in the database
$script = Script::where('file', $file->name)->first();
// Check Script exists
if ($script) {
// Update the file properties
$file->executed = 'Yes';
$file->processed = $script->created_at
}
// Set the table rows
$table->setRows([
[$file->executed, $file->name, $file->processed]
]);
}
// Render the table to the console
$table->render();
对我来说,它应该找到的每个文件(目前是 3 个)都应该显示在表格中,并显示正确的数据,但它只显示最后一个,所以每次setRows()
显然都被循环的最后一个循环覆盖$iterator
。
我尝试创建一个$files
数组并在循环$file
结束时将每个数组推入其中$iterator
,然后移出$table->setRows()
循环,$iterator
但当然在它内部执行 a foreach ($files as $file)
withsetRows()
会使您回到上一个循环覆盖前一个循环的相同情况。
据我从他们的文档中可以看出,没有一种setRow()
方法可以设置可以用于每个$iterator
循环的单个行,并且您也不能在该方法中放置一个foreach
循环。setRows
必须有一种方法可以动态设置行,但我看不到它,希望有人可以帮助我。