我正在尝试为每个符合我的条件的发票导出PDF和XML文件。到目前为止,除了一种非常奇怪的行为之外,一切都运行良好。
在Controller的执行函数中,我有一个foreach循环,像这样遍历数据库中的结果
foreach($result as $row) {
$this->writeXml($row['document_increment']);
$this->writePdf($row['document_id'], $row['document_increment']);
}
调用这两个函数
public function writeXml($document_increment){
$content = $this->buildXml();
$myfile = fopen('/var/www/magento2/var/folder/_' . $document_increment. '.xml', "w");
fwrite($myfile, $content);
fclose($myfile);
}
public function writePdf($document_id, $document_increment){
$invoice = $this->invoiceRepository->get($document_id);
$pdf = $this->invoicePdfGeneratorService->execute($invoice);
$this->fileFactory->create(
'_' . $document_increment. '.pdf',
$pdf->render(),
\Magento\Framework\App\Filesystem\DirectoryList::VAR_ELO ,
'application/pdf'
);
}
我完全知道,其中一些代码根本不是Magento 2的最佳实践,但这更多的是“我们可以做到吗?”情况。
现在,我已经设置了一个ajax请求来手动调用我的Controller,以便从后端对其进行测试。当我这样做时,Magento会生成两个发票PDF和两个发票XML文件-然后停止,没有任何错误,警告或类似信息。我将其范围缩小到writePdf()
函数。删除该文件将按预期生成5个(在查询中为{LIMIT
)XML文件。
我已经排除了通常的情况
并检查了所有日志,但是没有异常/错误/某些东西,也没有我认为负责的某些配置。
我认为这很奇怪,因为它在 second 循环后就中断了。有谁知道是什么原因造成的?我真的很感谢每一个提示。
编辑
我将触发操作从ajax调用更改为cron作业。事情变得更加奇怪:现在它可以工作了,cron保存了所有PDF和XML文件。有人可以向我解释/有人知道为什么吗?