我正在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变量
答案 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);