【问题标题】:Passing Variable from Codeigniter session class to FPDF class将变量从 Codeigniter 会话类传递给 FPDF 类
【发布时间】:2013-06-25 18:31:48
【问题描述】:

我在设置使用 FPDF 和 Codeigniter 框架创建的 PDF 的页眉和页脚时遇到了一些问题。在这段代码中,我无法将 $user 变量回显到我的标题中。我必须做什么才能获得该变量? 该类的代码如下:

<?php
date_default_timezone_set('Asia/Jakarta');
$user=$this->session->userdata('name');

class printFPDF extends FPDF{
    var $user;
    function userdata($user){
        $this->user=$user;
    }
    // Page header
    function Header(){
        global $user;
        // Arial bold 15
        $this->SetFont('Arial','I',8);
        // Move to the right
        $this->Cell(1);
        // Title
        $this->Cell(30,10,"Created by ".$this->user,0,0,'L');
        // Move to the right        
        $this->Cell(190);
        // Line break
        $this->Ln(15);
    }
}

任何帮助将不胜感激。

【问题讨论】:

  • 你是否包含了会话库?
  • 如果他没有,他就会出错。你不能在非对象上询问方法。

标签: php codeigniter session-variables cfpdf


【解决方案1】:

您没有将变量传递给 PDF 类。

$user=$this->session->userdata('name');

在这里,您正确地从 Codeigniter 中获取会话...在 Codeigniter 中。这一行必须在 Controller、Model 等任何东西中,但在 Codeigniter 中,因为您使用的是它的本机会话库。

class printFPDF extends FPDF{
    var $user;
    function userdata($user){
        $this->user=$user;

}

我看到您在其中创建了一个自定义方法来分配 $user 属性。没关系。

我不知道你是如何加载 FDPF 类的,你应该把它做成一个库,然后使用 CI 中的 $this->load->library() 方法加载它。

现在,无论您使用何种方式在 CI 中加载 FPDF 库,您都应该得到一个库对象的实例。

一个例子(假设你没有把它变成一个库,只是在你的控制器中包含了这个类,你从 CI 会话中获取 $user 变量)

$fpdf = new printFPDF();

现在您传递了您创建的自定义 $user 变量,FPDF 类将使其可用:

$fpdf->userdata($user);

【讨论】:

    【解决方案2】:

    @Damien Pirsy:它不必在 CodeIgniter 中。您始终可以在项目中的任何位置引用 CodeIgniter 实例。

    如果您在 $CI 变量中实例化 CodeIgniter,您可以访问控制器、模型、库等中的所有内容。请记住使用 $this->CI而不是 $this 在这样做之后,像这样:

    <?php
    date_default_timezone_set('Asia/Jakarta');
    
    class printFPDF extends FPDF{
    
        var $CI;
    
        function __construct(){
            parent::__construct();
            $this->CI =& get_instance();
        }
    
        function userdata($user){
            $this->CI->session->set_userdata('name', $user);
        }
    
        // Page header
        function Header(){
            // Arial bold 15
            $this->SetFont('Arial','I',8);
            // Move to the right
            $this->Cell(1);
            // Title
            $this->Cell(30,10,"Created by ".$this->CI->session->userdata('name'),0,0,'L');
            // Move to the right        
            $this->Cell(190);
            // Line break
            $this->Ln(15);
        }
    }
    

    【讨论】:

    • 是的,我知道,我的用词很差。你的方法是实现相同目标的另一种好方法。不过,就我个人而言,我会解耦代码,在 FPDF 类中为用户创建 getter/setter 并按需加载该类。通过这种方式,您可以在另一个非 CI 项目中使用该类,并使其在其他环境中无需修改即可正常工作
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-06-12
    • 1970-01-01
    • 2011-06-20
    • 1970-01-01
    • 1970-01-01
    • 2015-06-13
    相关资源
    最近更新 更多