【问题标题】:PHPWord TemplateProcessor uninitializedPHPWord TemplateProcessor 未初始化
【发布时间】:2020-07-24 00:12:22
【问题描述】:

我在尝试从我有此代码的 PHPWord 模板处理器生成文件时遇到此问题...

    <?php 

require_once '../vendor/autoload.php';

$num_written = 0;

class Processor{

    private $templateProcessor;

    private  $objWriter;

function __construct($template){

    $templateProcessor = new \PhpOffice\PhpWord\TemplateProcessor($template);

}


function create_document_from_template($formdata){

        global $num_written;
        $num_written++;

        $name = "Receipt".$num_written.".docx";

         //Notice: Undefined variable: templateProcessor
        $templateProcessor->setValue('name',$formdata["company-name"]);
        $templateProcessor->setValue('address',$formdata["company-address"]);
        $templateProcessor->setValue('city',$formdata["company-city"]);
        $templateProcessor->setValue('can_province',$formdata["company-can-province"]);
        $templateProcessor->setValue('postal_code',$formdata["company-postal-code"]);
        $templateProcessor->setValue('phone_number',$formdata["company-phone-number"]);
        $templateProcessor->setValue('email',$formdata["company-email"]);
        $templateProcessor->setValue('website',$formdata["company-website"]);
        $templateProcessor->setValue('letter_signature_name',$formdata["company-letter-signature-name"]);
        $templateProcessor->setValue('letter_signature_title',$formdata["company-letter-signature-title"]);
        $templateProcessor->setValue('letter_text',$formdata["company-letter-text"]);
        $templateProcessor->setValue('receipt_signature_name',$formdata["company-receipt-signature-name"]);
        $templateProcessor->setValue('charity_number',$formdata["company-charity-number"]);

        $objWriter = \PhpOffice\PhpWord\IOFactory::createWriter($templateProcessor, 'Word2007');
        $link_to_save = "../submission/docxs_to_send/".$name;
        $objWriter->save($link_to_save);

        return $name;
       
}

}



?>

其中 $template 是我的 docx 的名称,它与我的 php 文件位于同一目录中

我收到以下错误:注意:未定义变量:模板处理器

我找不到关于这个特定问题的任何文档,这是为什么呢?

【问题讨论】:

    标签: php web word


    【解决方案1】:

    您正在通过create_document_from_template 方法访问构造函数中的局部变量。

    在你的构造函数中,你应该使用$this-&gt;templateProcessor而不是$templateProcessor

    $templateProcessor 的所有实例都应在您的 create_document_from_template 方法中更改为 $this-&gt;templateProcessor

    然后你的整个代码变成:

    <?php 
    
    require_once '../vendor/autoload.php';
    
    $num_written = 0;
    
    class Processor{
    
        private $templateProcessor;
    
        private  $objWriter;
    
        function __construct($template){
    
            $this->templateProcessor = new \PhpOffice\PhpWord\TemplateProcessor($template);
    
        }
    
    
        function create_document_from_template($formdata){
    
            global $num_written;
            $num_written++;
    
            $name = "Receipt".$num_written.".docx";
    
            //Notice: Undefined variable: templateProcessor
            $this->templateProcessor->setValue('name',$formdata["company-name"]);
            $this->templateProcessor->setValue('address',$formdata["company-address"]);
            $this->templateProcessor->setValue('city',$formdata["company-city"]);
            $this->templateProcessor->setValue('can_province',$formdata["company-can-province"]);
            $this->templateProcessor->setValue('postal_code',$formdata["company-postal-code"]);
            $this->templateProcessor->setValue('phone_number',$formdata["company-phone-number"]);
            $this->templateProcessor->setValue('email',$formdata["company-email"]);
            $this->templateProcessor->setValue('website',$formdata["company-website"]);
            $this->templateProcessor->setValue('letter_signature_name',$formdata["company-letter-signature-name"]);
            $this->templateProcessor->setValue('letter_signature_title',$formdata["company-letter-signature-title"]);
            $this->templateProcessor->setValue('letter_text',$formdata["company-letter-text"]);
            $this->templateProcessor->setValue('receipt_signature_name',$formdata["company-receipt-signature-name"]);
            $this->templateProcessor->setValue('charity_number',$formdata["company-charity-number"]);
    
            $objWriter = \PhpOffice\PhpWord\IOFactory::createWriter($this->templateProcessor, 'Word2007');
            $link_to_save = "../submission/docxs_to_send/".$name;
            $objWriter->save($link_to_save);
    
            return $name;
    
        }
    
    }
    

    【讨论】:

    • 谢谢,伙计。另一个证明我是愚蠢的。很久没有用 PHP 编码了,我忘记了这个特殊的规则,谢谢
    • 大声笑。它发生在我们所有人身上
    猜你喜欢
    • 2019-08-30
    • 1970-01-01
    • 2018-09-23
    • 1970-01-01
    • 2018-10-10
    • 2016-10-08
    • 2021-11-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多