在codeigniter中使用上传类 - 模型还是控制器?

时间:2010-07-16 09:15:48

标签: file class codeigniter upload

关于CI的快速提问。

我有一个视图,包含表单,多个文本输入字段和文件上传。 我希望能够从文本字段中获取输入,将其保存到数据库,然后上传图像。

我通过将上传代码放在控制器中实现了这一点,如果上传成功,则会调用我的模型来更新数据库。

这是“最佳做法”,还是一种可接受的做法?或者文件上传应该在模型中。这有关系吗?

基本上我的代码是:

    function edit_category()
        {
            $config['upload_path'] = 'images/category/';
            $config['allowed_types'] = 'gif|jpg|jpeg|png';
            $config['max_size'] = '1000';
            $config['max_width'] = '300';
            $config['max_height'] = '300';

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

            if(!$this->upload->do_upload()) 
            {
                $this->session->set_flashdata('status', $this->upload->display_errors());
                        redirect('admin/category/edit/'.$this->input->post('catID'), 'location');
            }
            else  /*no errors, upload is successful..*/
            {
                $fInfo = $this->upload->data();
                //$this->_createThumbnail($fInfo['file_name']);
                            //process form POST data.
                            $data = array(
                                'catName' => $this->input->post('catName'),
                                'catDesc' => $this->input->post('catDesc'),
                                'catImage' => $fInfo['file_name']
                );

/* update the database */
                $category = $this->category_model->edit_category($data, $this->input->post('catID'));

3 个答案:

答案 0 :(得分:5)

我会把它放在模型中,因为我喜欢让我的控制器尽可能地保持苗条。我认为控制器是视图和后台处理之间的链接,而不是处理本身。 我不确定这是否是“最佳实践”。它肯定会以你的方式运作。 CodeIgniter允许您在应用mvc理论方面非常灵活。

答案 1 :(得分:0)

使用模型与数据交互,无论是数据库交互,api调用还是文件上载和下载。使用控制器运行show并调用该数据。如果与该数据交互的方法发生变化,请尽量将它们分开。大多数时候我们认为模型是一个数据库函数,但它确实应该是任何数据,无论它是如何检索的。

答案 2 :(得分:-1)

我出现了同样的困境,我应该将文件上传功能放在控制器或模型中。 经过几次试验和错误后,我决定将其置于模型之下,以便可重复使用,因为来自另一个控制器的调用控制器是针对MVC概念的。