gpt4 book ai didi

php - 我可以将数据传递给 Codeigniter 输出类而不显示它吗?

转载 作者:IT王子 更新时间:2023-10-29 00:05:45 30 4
gpt4 key购买 nike

我正在研究一种方法,让用户能够生成发票和其他表格数据的 PDF 副本。为此,我包装了 dompdf到我可以与 CI 一起使用的库中,并创建了一个方法,该方法将根据 CI 的 output->get_output() 的返回值生成 PDF。包装类似于 this one on Github .

问题是,除了 load->view() 之外,我想不出一种方法将 View (以及 PDF 所需的 HTML/CSS)获取到 CI 的输出类中,它将写入浏览器。

我唯一的选择是使用 curl 来请求页面,但这似乎很愚蠢,因为我可以直接从输出缓冲区中获取它。我只是不想将 HTML 发送到浏览器,因为我设置了标题告诉浏览器需要 PDF。

明确地说,这是我想要完成的(按照我想要完成的顺序):

  1. 做我通常做的所有事情来准备要显示的 View
  2. 将 View 加载到 CI 输出类中,但不显示它
  3. output->get_output()的返回值传给我的dompdf库
  4. 设置合适的标题
  5. 执行我的 dompdf 方法,将 PDF 发送到浏览器

我看不到任何基于 output class documentation 执行第 2 步的方法.

是否可以在不显示的情况下查看输出类?如果是这样,如何?我正在使用 CI 2.0.3。

编辑

很有帮助Anthony Sterling指出I can just get what I want from the loader class通过设置第三个参数告诉它返回一个字符串而不是将 View 呈现为 TRUE。例如:

$lotsaHtml = $this->load->view('fooview', $somearray, TRUE);

这在我的特定实例中会更好,因为我不需要加载部分。然而,这仍然是一个有效且(我认为)有趣的问题,知道我是否可以从 OB 那里得到同样的东西也很方便,也许如果我确实有一堆部分。这些可以串联起来,但是很糟糕。

似乎我应该能够让输出类不渲染任何东西(否则,为什么 get_output() 存在?)所以我可以用它知道的一切做其他事情。我就是找不到实现这一目标的方法。

编辑2

一些伪代码(但离现实不远)通过展示我做了什么然后解释我实际上想要做的事情来说明我希望做什么。

假设我在名为 invoice 的 Controller 中有一个公共(public)方法 genpdf($id) 使用名为 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);
}

这与我现在可用的代码几乎相同。在那里,我要求加载程序解析并将 pdfgen View 的结果作为字符串提供给我,我将其传递给 dompdf 包装器中的函数,该函数设置标题并将 PDF 发送到浏览器。

这似乎很容易通过获取输出缓冲区本身(在正确设置 header 等之后)来实现。

或者我是否只需要在我加载的每个部分连续调用输出类 append_output()

加载大量模型的多种方法需要协同工作才能生成这些模型(它们是事后才想到的),所以我希望只收集所有模型并直接从输出类中检索它。可能我只需要逐渐与 output->append_output() 对话以实现这一点。

最佳答案

...所以 - 我理解正确吗 - 您想将整个最终输出(而不仅仅是 View )作为字符串而不是将其显示给用户?为什么不重载 Controller 的 _output() 函数?

class Your_controller extends CI_Controller
{
function stuff()
{
// do whatever - prep $data etc
$this->load->view('your_view', $data);
}

function _output($output)
{
// send $output to your library - get results blah blah
$result_pdf_file = $this->your_pdf_library_generator($output);

// Show something else to the user
echo "hi - I'm not what you expected - but here is your PDF";

echo $result_pdf_file; // or something like that
}
}

这意味着您可以将任何您喜欢的内容发送到输出类 - 但除了您想要的内容之外什么也不会显示。

有很多方法可以改进这个想法(即 Hook 、打开/关闭输出的变量等)——但最简单的方法是让这个 Controller 专门用于您的 pdf_generation 命令。

I don't see any way of doing step 2 based on the output class documentation. Is it possible to get a view into the output class without displaying it? If so, how? I'm using CI 2.0.3.

Controller _output() 文档实际上在CI controller documentation 中,这就是它让您望而却步的原因。

关于php - 我可以将数据传递给 Codeigniter 输出类而不显示它吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12210144/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com