0

我觉得我错过了一小步,显然其他相关问题的每个人都理解。

我创建了一个简单的CI 2视图、控制器和模型,如下所示:

我已将dompdf安装到 helpers 文件夹中,如下所示:

applications/helpers/dompdf

applications/helpers/dompdf/dompdf_help.php

我想要发生的是当用户单击视图页面上的提交按钮时,将表单数据发送到数据库,然后获取该填写表单的 pdf。

在得到未定义的 var 错误或什么都没有之间,除了数据进入 db,我看不到我缺少什么。

有人可以指导我吗?我没有得到什么?

看法

<!DOCTYPE html>
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title>test pdf</title>
    </head>
    <body>
<?php // Change the css classes to suit your needs    

$attributes = array('class' => '', 'id' => '');
echo form_open('quicksubmit', $attributes); ?>

<p>
        <label for="title">Title <span class="required">*</span></label>
        <?php echo form_error('title'); ?>

        <?php // Change the values in this array to populate your dropdown as required ?>
        <?php $options = array(
                    ''  => 'Please Select',
                    'Mrs'    => 'Mrs',
                    'Miss'    => 'Miss',
                    'Ms'    => 'Ms',
                    'Mr'    => 'Mr',
                  ); ?>

        <br /><?php echo form_dropdown('title', $options, set_value('title'))?>
</p>                                             

<p>
        <label for="first_name">First Name</label>
        <?php echo form_error('first_name'); ?>
        <br /><input id="first_name" type="text" name="first_name" maxlength="100" value="<?php echo set_value('first_name'); ?>"  />
</p>

<p>
        <label for="last_name">Last Name <span class="required">*</span></label>
        <?php echo form_error('last_name'); ?>
        <br /><input id="last_name" type="text" name="last_name" maxlength="100" value="<?php echo set_value('last_name'); ?>"  />
</p>

<p>
        <label for="branch">Branch</label>
        <?php echo form_error('branch'); ?>

        <?php // Change the values in this array to populate your dropdown as required ?>
        <?php $options = array(
                    ''  => 'Please Select',
                    'Branch 1'    => 'Branch One',
                    'Branch 2'    => 'Branch Two',
                  ); ?>

        <br /><?php echo form_dropdown('branch', $options, set_value('branch'))?>
</p>                                             

<p>
        <label for="zip">Zip</label>
        <?php echo form_error('zip'); ?>
        <br /><input id="zip" type="text" name="zip" maxlength="7" value="<?php echo set_value('zip'); ?>"  />
</p>


<p>
        <?php echo form_submit( 'submit', 'Submit'); ?>
</p>

<?php echo form_close(); ?>

    </body>
</html>

控制器

<?php

class Quicksubmit extends CI_Controller {

    function __construct()
    {
        parent::__construct();
        $this->load->library('form_validation');
        $this->load->database();
        $this->load->helper('form');
        $this->load->helper('url');
        $this->load->model('quicksubmit_model');
    }   
    function index()
    {           
        $this->form_validation->set_rules('title', 'Title', 'required|trim|xss_clean|max_length[50]');          
        $this->form_validation->set_rules('first_name', 'First Name', 'trim|xss_clean|max_length[100]');            
        $this->form_validation->set_rules('last_name', 'Last Name', 'required|trim|xss_clean|max_length[100]');         
        $this->form_validation->set_rules('branch', 'Branch', 'trim|xss_clean|max_length[100]');            
        $this->form_validation->set_rules('zip', 'Zip', 'trim|xss_clean|is_numeric|max_length[7]');

        $this->form_validation->set_error_delimiters('<br /><span class="error">', '</span>');

        if ($this->form_validation->run() == FALSE) // validation hasn't been passed
        {
            $this->load->view('quicksubmit_view');
        }
        else // passed validation proceed to post success logic
        {
            // build array for the model
                    $this->pdf($output);

                        $form_data = array(
                                    'title' => set_value('title'),
                                    'first_name' => set_value('first_name'),
                                    'last_name' => set_value('last_name'),
                                    'branch' => set_value('branch'),
                                    'zip' => set_value('zip')
                                    );

            // run insert model to write data to db

            if ($this->quicksubmit_model->SaveForm($form_data) == TRUE) // the information has therefore been successfully saved in the db
            {
                redirect('quicksubmit/success');   // or whatever logic needs to occur
            }
            else
            {
            echo 'An error occurred saving your information. Please try again later';
            // Or whatever error handling is necessary
            }
        }
    }
    function success()
    {
            redirect(base_url(),'refresh');     
            /*echo 'this form has been successfully submitted with all validation being passed. All messages or logic here. Please note
            sessions have not been used and would need to be added in to suit your app';*/
    }
        function pdf()
            {
                 $this->load->helper(array('dompdf', 'file'));
                 // page info here, db calls, etc.     
                 $html = $this->load->view('quicksubmit_view', $data, true);
                 pdf_create($html, 'filename');
                 /*or
                 $data = pdf_create($html, '', false);
                 write_file('name', $data);*/
                 //if you want to write it to disk and/or send it as an attachment    
            }
}
?>

模型

<?php

class Quicksubmit_model extends CI_Model {

    function __construct()
    {
        parent::__construct();
    }

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

      /** 
       * function SaveForm()
       *
       * insert form data
       * @param $form_data - array
       * @return Bool - TRUE or FALSE
       */

    function SaveForm($form_data)
    {
        $this->db->insert('quicksubmit', $form_data);

        if ($this->db->affected_rows() == '1')
        {
            return TRUE;
        }

        return FALSE;
    }
}
?>

dompdf_help.php 文件

<?php if (!defined('BASEPATH')) exit('No direct script access allowed');

function pdf_create($html, $filename='', $stream=TRUE) 
{
    require_once("dompdf/dompdf_config.inc.php");

        $dompdf = new DOMPDF();
        $dompdf->load_html($html);
        $dompdf->render();
        if ($stream) {
            $dompdf->stream($filename.".pdf");
        } else {
            return $dompdf->output();
        }
}
?>
4

1 回答 1

1

你快到了!

将 dompdf 存储在 third_party 文件夹中可能会更好,它不是代码点火器助手。- 查看我在构造函数中存储它的路径。然后它总是可用的。

此外,最好在模型中完成程序的“工作”,因此这包括制作 PDF 等。

  • 不要在代码末尾使用 ?>。

我修改了您的代码以使其正常工作,并验证它确实有效。它只是保存一个名为 tmp/name.pdf 的文件。我相信你可以解决剩下的问题。我确实注释掉了数据库加载器,因为我不需要它来测试代码。

见编码

<?php

 class Quicksubmit extends CI_Controller {

function __construct()
{
    parent::__construct();
    $this->load->library('form_validation');
    //$this->load->database();
    $this->load->helper('form');
    $this->load->helper('url');
    $this->load->helper('file');
    $this->load->model('quicksubmit_model');

    global $_dompdf_show_warnings;global $_dompdf_debug;global $_DOMPDF_DEBUG_TYPES;global $_dompdf_warnings;$_dompdf_show_warnings = FALSE;
    require_once(realpath(APPPATH."third_party/dompdf")."/dompdf_config.inc.php"); // remember that the constant DOMPDF_TEMP_DIR may need to be changed.
    spl_autoload_register('DOMPDF_autoload');
}   
function index()
{           
    $this->form_validation->set_rules('title', 'Title', 'required|trim|xss_clean|max_length[50]');          
    $this->form_validation->set_rules('first_name', 'First Name', 'trim|xss_clean|max_length[100]');            
    $this->form_validation->set_rules('last_name', 'Last Name', 'required|trim|xss_clean|max_length[100]');         
    $this->form_validation->set_rules('branch', 'Branch', 'trim|xss_clean|max_length[100]');            
    $this->form_validation->set_rules('zip', 'Zip', 'trim|xss_clean|is_numeric|max_length[7]');

    $this->form_validation->set_error_delimiters('<br /><span class="error">', '</span>');

    if ($this->form_validation->run() == FALSE) // validation hasn't been passed
    {
        $this->load->view('quicksubmit_view');
    }
    else // passed validation proceed to post success logic
    {
        // build array for the model


        $form_data = array(
                    'title' => set_value('title'),
                    'first_name' => set_value('first_name'),
                    'last_name' => set_value('last_name'),
                    'branch' => set_value('branch'),
                    'zip' => set_value('zip')
                    );
        $this->pdf($form_data);
        // run insert model to write data to db

        if ($this->quicksubmit_model->SaveForm($form_data) == TRUE) // the information has therefore been successfully saved in the db
        {
            redirect('quicksubmit/success');   // or whatever logic needs to occur
        }
        else
        {
            echo 'An error occurred saving your information. Please try again later';
        // Or whatever error handling is necessary
        }
    }
}
function success()
{
        redirect(base_url(),'refresh');     
        /*echo 'this form has been successfully submitted with all validation being passed. All messages or logic here. Please note
        sessions have not been used and would need to be added in to suit your app';*/
}
function pdf($data)
{
    $dompdf = new DOMPDF();
    $html = $this->load->view('quicksubmit_view', $data, true);
    $dompdf->set_paper('a4','portrait');
    $dompdf->load_html($html);
    $dompdf->render();
    $pdf = $dompdf->output();
    write_file('tmp/name.pdf', $pdf);

}
}
于 2013-09-23T09:55:57.577 回答