Php 在Yii框架中通过TCpdf多次加载操作

Php 在Yii框架中通过TCpdf多次加载操作,php,yii,tcpdf,Php,Yii,Tcpdf,我在Yii框架中使用Tcpdf,(只是)当我在视图中创建新的Tcpdf以导出文件时,这导致我的操作加载了两三次(我在操作中通过计数器进行了检查),最后它工作了,并将我的pdf文件交给了我 我不希望多次加载此操作,因为在操作中,我将根据一些规则更改某些属性,并且此规则将在首次加载控制器后更改 这个问题在主机和我的本地(xammp)中都可以正常工作(我的服务器是linux) 我的行动: public function actionPrint_diploma($id) { // check n

我在Yii框架中使用Tcpdf,(只是)当我在视图中创建新的Tcpdf以导出文件时,这导致我的操作加载了两三次(我在操作中通过计数器进行了检查),最后它工作了,并将我的pdf文件交给了我

我不希望多次加载此操作,因为在操作中,我将根据一些规则更改某些属性,并且此规则将在首次加载控制器后更改

这个问题在主机和我的本地(xammp)中都可以正常工作(我的服务器是linux)

我的行动:

public function actionPrint_diploma($id)
{
    // check number of load this action :
    if(isset(Yii::app()->session['counter'])&&Yii::app()->session['counter']>=0)
        Yii::app()->session['counter']=Yii::app()->session['counter']+1;
    else    
        Yii::app()->session['counter']=0;

    // ...

    $this->render('coach_certificate');

}
我的视图(coach_certificate.php):


你必须用两个动作来解决这个问题

第1步:

在第一个动作中设置您的更改等。。。然后不要使用from
渲染
,而是使用
重定向
第二个操作

第二步:

在第二个操作中,只需渲染视图文件。 最后,如果它多次加载操作,它将加载第二个操作,并且多次不调用更改函数。 我希望它能正常工作


享受它;-)

您可以在会话中使用与设置计数器相同的标志,并且仅在未设置标志的情况下运行代码等。@manquery,我使用过这种方法,但这种方法的问题是,在标志为真后,我可以在哪里更改标志?
if(isset(Yii::app()->session['myFlag')&&Yii::app()->session['myFlag'!==true){Yii::app()->session['myFlag']=true;//执行操作逻辑;Yii::app()->session['myFlag']=false;Yii::app()->end()}
@manquery这不起作用,因为如果($model->is_print==0){$message==not print';$model->is_print=1;model->->save()}否则{$message print'>
// Include the main TCPDF library (search for installation path).
$dir=Yii::getPathOfAlias('webroot').'/my_library/tcpdf/examples/tcpdf_include.php';

require_once($dir);

// create new PDF document
$pdf = new TCPDF(PDF_PAGE_ORIENTATION, PDF_UNIT, PDF_PAGE_FORMAT, true, 'UTF-8', false);

// set document information
$pdf->SetCreator(PDF_CREATOR);
$pdf->SetTitle('printing certificate');
$pdf->SetSubject('printing certificate');
$pdf->SetKeywords('PDF');

// remove default header/footer
$pdf->setPrintHeader(false);
$pdf->setPrintFooter(false);


// set default header data
$pdf->SetHeaderData(PDF_HEADER_LOGO, PDF_HEADER_LOGO_WIDTH, PDF_HEADER_TITLE.' 061', PDF_HEADER_STRING);

// set header and footer fonts
$pdf->setHeaderFont(Array(PDF_FONT_NAME_MAIN, '', PDF_FONT_SIZE_MAIN));
$pdf->setFooterFont(Array(PDF_FONT_NAME_DATA, '', PDF_FONT_SIZE_DATA));

// set default monospaced font
$pdf->SetDefaultMonospacedFont(PDF_FONT_MONOSPACED);

// set margins
$pdf->SetMargins(PDF_MARGIN_LEFT, PDF_MARGIN_TOP, PDF_MARGIN_RIGHT);
//$pdf->SetHeaderMargin(PDF_MARGIN_HEADER);
$pdf->SetFooterMargin(PDF_MARGIN_FOOTER);

// set auto page breaks
$pdf->SetAutoPageBreak(FALSE, PDF_MARGIN_BOTTOM);

// set image scale factor
$pdf->setImageScale(PDF_IMAGE_SCALE_RATIO);


// set some language-dependent strings (optional)
if (@file_exists(dirname(__FILE__).'/lang/far.php')) {
    require_once(dirname(__FILE__).'/lang/far.php');
    $pdf->setLanguageArray($l);
}

//$pdf->addTTFfont('/fonts/BZar.ttf', '', '', 32);
// ---------------------------------------------------------
// set font                                                          
$lg = Array();
$lg['a_meta_charset'] = 'UTF-8';
$lg['a_meta_dir'] = 'rtl';
$lg['a_meta_language'] = 'fa';
$lg['w_page'] = 'page';

// set some language-dependent strings (optional)
$pdf->setLanguageArray($lg);

// ---------------------------------------------------------


$pdf->AddPage();                                                                                                                 

$pdf->SetFont('freeserif', '', 10);   

$pdf->SetAbsXY(305,50);
$html = Yii::app()->session['counter'];
$pdf->writeHTML($html, true, false, true, true,'C');    

$pdf->lastPage();                                                                        

// ---------------------------------------------------------

//Close and output PDF document
$pdf->Output("test.pdf", 'D');                                         // 
Yii::app()->end();