2013-06-28 42 views
0

我在设置使用FPDF和Codeigniter框架创建的PDF的页眉和页脚时遇到了一些麻烦。在这段代码中,我无法将$ user变量回显到我的页眉。 ?我必须做些什么来获取变量.. 该类的代码如下:将变量从Codeigniter会话类传递给FPDF类

<?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); 
    } 
} 

任何帮助,将不胜感激。

+0

您是否包含会话库? –

+0

如果他没有,他会有错误。你不能问一个非对象的方法。 – machineaddict

回答

0

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

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

在这里您正确地从Codeigniter ... Codeigniter中获取会话。由于您使用的是本机会话库,因此此行必须位于Controller,Model中,无论在Codeigniter中。

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

}

我看你是一个自定义的方法来分配$用户属性中创建。这很好,没错。

我不知道如何加载FDPF类,您应该使它成为一个库,并使用CI中的$ this-> load-> library()方法加载它。

现在,无论您用什么方式在CI内加载FPDF库,您都应该出来一个库对象的实例。

一个例子(让我们假设你没有做它一个图书馆,只是包含你的控制器里面你获取从CI会话$用户变量的类,同样在其中)

$fpdf = new printFPDF(); 

现在你通过创建的$用户变量所做的习惯和FPDF类将有它可用:

$fpdf->userdata($user); 
0

@Damien Pirsy:它没有在里面笨。您始终可以在项目中的任何位置引用CodeIgniter实例。

如果实例笨在$ CI变量,您可以访问你的控制器,模型,图书馆等所拥有的一切记住这样做后使用>的$这个$这个 - CI代替,如下所示:

<?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); 
    } 
} 
+0

是的,我知道,我的语言选择很差。你是另一个实现同样目标的好方法。但个人而言,我会解耦代码,为FPDF类中的用户创建getter/setter,并根据需要加载类。通过这种方式,您可以在另一个非CI项目中使用该类,并且在其他环境中无需修改就可以正常工作 –