【问题标题】:How to fix 'Missing argument 1 for Pdf_label::__construct()' when using fpdf label script in codeigniter在 codeigniter 中使用 fpdf 标签脚本时如何修复“Pdf_label::__construct() 缺少参数 1”
【发布时间】:2019-08-29 01:01:31
【问题描述】:

我收到错误:

消息:Pdf_label::__construct() 缺少参数 1,调用 C:\xampp\htdocs\project1b\system\core\Loader.php 在第 1285 行和 定义

文件名:libraries/PDF_Label.php

我想要做的是,我尝试在 codeigniter 中使用 fpdf 标签脚本 (Documentation Here),我已经尝试使用此代码在 codeigniter 中生成一个简单的 pdf:

public function cetakLabelfpdf()
    {
        $this->load->library('fpdf');

        $pdf = new FPDF();
        $pdf->AddPage();
        $pdf->SetFont('Arial', 'B', 16);
        $pdf->Cell(40, 10, 'Hello World!');
        $pdf->Output();
    }

它有效,但是当我尝试添加脚本(在本例中为标签脚本)时,我将标签脚本放在与 fpdf 文件(应用程序/库)相同的目录中,并使用此示例代码生成 pdf

public function cetakLabelfpdf()
{
    $this->load->library('PDF_Label');

    // Standard format
    $pdf = new PDF_Label('L7163');

    $pdf->AddPage();

    // Print labels
    for ($i = 1; $i <= 20; $i++) {
        $text = sprintf("%s\n%s\n%s\n%s %s, %s", "Laurent $i", 'Immeuble Toto', 'av. Fragonard', '06000', 'NICE', 'FRANCE');
        $pdf->Add_Label($text);
    }

    $pdf->Output();
}

我对第一条消息感到满意,如果有人能证明我在这个案例中做错了什么,我真的很感激。

【问题讨论】:

  • 这看起来不像是一个ci库,而且有很多fpdf的repos,你用的是哪个?如果您没有使用任何 codeigniter 库来使用 fpdf,为什么要像加载它一样加载它?我认为这就是您的错误所在,因为当您通过$this-&gt;load 加载标签类时,它正在初始化标签类而没有所需的构造函数参数。
  • @Alex 我直接从fpdf.org 下载它,我会尝试找到使用所需构造函数初始化标签的解决方案,谢谢
  • afaik fpdf.org 没有 codeigniter 库。您根本不应该尝试通过 $this-&gt;load-&gt;library() 加载它,而是在需要它的类的顶部使用 require 。只需像任何其他 php 类一样初始化它(就像你正在使用新词一样)。让我知道会发生什么...
  • @Alex 非常感谢先生,我尝试您的建议,将 $this->load->library() 替换为 required() 并且代码有效!如果你能解释在这个 codeigniter 案例中 $this->load->library() 和 require() 的区别,我会非常感激。注意:请在回答按钮中回答,以便我可以将其标记为答案。
  • 确定。很高兴我能帮上忙;)

标签: php codeigniter fpdf


【解决方案1】:

添加到我的评论中,基本上$this-&gt;load 旨在与 CodeIgniter 兼容的库/模型/帮助器等一起使用。当你有一些与 CodeIgniter 完全无关的东西(不是围绕它的生态系统构建的)时,你可以创建一个库来“调整”类以与 CodeIgniter 兼容,或者你可以像使用常规类一样使用它,无论是作曲家自动加载还是需要必要的需要它的控制器/模型类顶部的文件(不适用于命名空间类 - 然后您需要作曲家或可以自动加载的东西)。

在您的特定情况下,当您在标签类上调用 $this-&gt;load-&gt;library() 时,CI 创建了一个 new 标签类(在幕后),并且没有将任何内容传递给它的 __construct,其中有一个必需的参数。因此错误。您可以通过$this-&gt;load-&gt;library('some_lib', ['arg1'=&gt;'foo', 'arg2'=&gt;'bar'] 将变量传递给库构造函数,但这仅适用于为 CI 构建的库(接收数组中的所有构造函数参数,而不是逗号分隔的参数列表)。

在此处查看更多信息:https://www.codeigniter.com/user_guide/general/creating_libraries.html#passing-parameters-when-initializing-your-class

【讨论】:

  • 很高兴有这个解释,这样我就可以了解更多关于 CI 的信息,非常感谢。
猜你喜欢
  • 2014-06-03
  • 1970-01-01
  • 2017-05-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-03-11
相关资源
最近更新 更多