codeigniter:从模型中加载变量和视图

时间:2011-07-25 22:38:02

标签: php mysql codeigniter

我正在Codeigniter中构建一个图像上传脚本(第一次),我的方式是,如果图像上传表单得到验证,它会在模型​​中执行以下代码:

public function upload($id) //function to handle the initial image upload before crop
{
    $config['image_library'] = 'gd2';
    $config['source_image'] = '/path/to/image/mypic.jpg';
    $config['create_thumb'] = TRUE;
    $config['maintain_ratio'] = TRUE;
    $config['width']     = 75;
    $config['height']   = 50;

    $this->load->library('image_lib', $config); 

    $this->image_lib->resize();

    $config['upload_path'] = 'images/uploads/temp/';
    $config['allowed_types'] = 'gif|jpg|png';
    $config['max_size'] = '2048';
    $config['max_width']  = '1024';
    $config['max_height']  = '768';

    $this->load->library('upload', $config);

    $file_data = $this->upload->data();

    if ( ! $this->upload->do_upload() )//the default parameter of do_upload() is 'userfile' (meaning the name of the form input) 
    {
        $error = '<p>Upload failed!</p> <p>Please make sure the image is in a .jpg, .gif or .png format and that it\'s no larger than 1028 x 768 pixels in dimension. Also it can\'t be more than 2MBs in size. If this problem persists, please contact <a href="mailto:webmaster@dreamsy.org">webmaster@dreamsy.org</a>.</p>';

        $this->session->set_flashdata('error', $error);
        redirect(base_url().'community/upload_image');
    }
    else
    {
        $image_path = base_url().'images/uploads/temp/'.$file_name;
        //$data = array( 'upload_data' => $this->upload->data() );

        //$this->load->view('community/upload_success');
        $this->load->helper('form', 'url');
        $vars['id'] = $this->uri->segment(3);
        $vars['$image_path'] = $image_path;
        $vars['$file_data'] = $file_data;
        $this->load->vars($vars); 
        $this->template->write_view('content', 'community/upload_success');
        $this->template->render();
    }
}>template->render(); //template library

但是当我调用加载的变量(通过load-&gt; vars())时,它们不会被加载,当页面加载时,我得到“未定义的变量”错误。我怀疑即使从模型中加载视图也不可能将变量从模型传递到视图,就像我上面所做的那样。或者我可能只是做错了(因为我有点像n00b)。

你会选择这条路吗?将变量传递给控制器​​然后从控制器加载视图会更有意义吗?或者其他我根本没考虑过的事情?大声笑

非常感谢任何帮助。提前谢谢。

*编辑: 我也有一个$ image_path变量

2 个答案:

答案 0 :(得分:3)

  你会选择这条路吗?将变量传递给控制器​​然后从控制器加载视图会更有意义吗?还是其他我根本没想过的东西?

是的,一般来说,有点接受让您的观点直接与模型对话,反之亦然,但仅限于使用表示层时。在CI的情况下,我认为在渲染视图时,最好将所有数据从控制器加载到视图中:

$this->load->view('your-view', $data);

要将vars从模型传递到控制器,您可以像这样调用模型上的方法:

// Your_Model is the class name of your model
// your_model is the variable name it gets injected into
$this->load->model('Your_Model','your_model');

$data['some_data'] = $this->your_model->get_some_data();

要在模型中定义这些getter,可以定义如下函数:

function get_some_data()
{
    return $this->some_data;
}

通过这种方式,您可以在数据中创建API,并且可以让getter以您需要的格式检索所需的任何内容。

答案 1 :(得分:0)

假设该行:     $这 - &GT;负载&GT;瓦尔($瓦尔); 是您要加载视图的位置,那么它应该是:     $ this-&gt; load-&gt; view('nameofview',$ vars);