是否可以将数据传递到 Codeigniter 输出类而不显示它?
我正在研究一种方法,使用户能够生成发票和其他表格数据的PDF副本。为此,我将 dompdf 包装到一个可以与 CI 一起使用的库中,并创建了一个方法,该方法将基于 CI 的返回值生成 PDF。包装器类似于Github上的这个。output->get_output()
问题是,我无法找到一种方法将视图(以及PDF所需的HTML / CSS)放入CI的输出类中,而不是,这将写入浏览器。load->view()
我唯一的其他选择是使用curl来请求页面,但这样做似乎很愚蠢,因为我可以从输出缓冲区正确获取它。我只是不希望将HTML发送到浏览器,因为我设置了标题,告诉浏览器期望PDF。
需要明确的是,这就是我想完成的(按照我想要完成的顺序):
- 执行我通常要执行的所有操作,以便为显示准备视图
- 将视图加载到 CI 输出类中,但不显示它
- 将 的返回值传递给我的 dompdf 库
output->get_output()
- 设置适当的标头
- 执行我的 dompdf 方法,将 PDF 发送到浏览器
我没有看到任何基于输出类文档执行步骤2的方法。
是否可以在不显示输出类的情况下获取输出类的视图?如果是这样,如何?我使用的是 CI 2.0.3。
编辑
非常有帮助的Anthony Sterling指出,我可以通过设置第三个参数来从加载器类中获得我想要的东西,告诉它返回一个字符串,而不是将视图呈现为TRUE。例如:
$lotsaHtml = $this->load->view('fooview', $somearray, TRUE);
这在我的特定实例中会更好,因为我不需要加载部分。然而,这仍然是一个有效且(我认为)有趣的问题,知道我是否可以从OB获得相同的信息也很方便,也许如果我确实有一堆部分。这些可以连接起来,但很糟糕。
看起来我应该能够让输出类不渲染任何东西(否则,为什么存在?),这样我就可以用它所知道的一切做其他事情。我只是找不到一种方法来实现这一目标。get_output()
编辑 2
一些伪代码(但离现实不远)说明了我希望做什么,通过展示我做了什么,然后解释我真正想做什么。
假设我在一个控制器中有一个公共方法,该控制器使用名为:genpdf($id)
invoice
inv
public function genpdf($invoiceId) {
$this->load->library('dompdflib');
$this->pagedata['invoice_data'] = $this->inv->getInvoice($invoiceId);
$html = $this->load->view('pdfgen', $this->pagedata, TRUE);
$this->dompdflib->sendPdf($html);
}
这几乎与我现在使用的代码相同。在那里,我要求加载程序解析并将视图的结果作为字符串提供给我,我将其传递给我的dompdf包装器中的函数,该函数设置标头并将PDF发送到浏览器。pdfgen
这似乎很容易通过获取输出缓冲区本身(在正确设置标头后/等)来做到这一点。
还是我只需要在加载每个部分时连续调用输出类?append_output()
加载大量模型的多个方法需要协同工作才能生成这些模型(它们是事后才想到的),所以我希望只是收集所有模型并直接从输出类中检索它。可能我只需要逐渐交谈才能实现这一目标。output->append_output()