开发者

codeigniter: loading variables and view from within model

开发者 https://www.devze.com 2023-03-23 08:31 出处:网络
I\'m building an image uploading script (for the first time) in Codeigniter and the way I have it is that if the image upload form gets validated it performs the following code in a model:

I'm building an image uploading script (for the first time) in Codeigniter and the way I have it is that if the image upload form gets validated it performs the following code in a model:

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( 'u开发者_开发知识库pload_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

But when I call the variables that are loaded (via load->vars()) they don't get loaded and when the page loads I get "undefined variable" errors. I suspect it's not possible to pass variables from a model to the view even when the view is loaded from within the model as I have done above. Or maybe I'm just doing something incorrectly (as I'm a bit of a n00b).

Would you even take this route? Would it make more sense to pass the variables to the controller and then to load the view from the controller? Or something else I haven't considered at all? lol

Any help is greatly appreciated. Thanks in advance.

*edit: I also have the $image_path variable inside of an


Would you even take this route? Would it make more sense to pass the variables to the controller and then to load the view from the controller? Or something else I haven't considered at all?

Yeah, generally speaking it is somewhat accepted to have your views talk directly to the model and vice versa but only when using a presentation layer. In the case of CI, I think it's best to have all the data loaded in from your controller to your view when you render the view like this:

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

To pass the vars from the model to the controller you can call methods on your model like this:

// 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();

To define those getters in your model, you define a function like this:

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

That way you create an API into your data, and you can have the getter retrieve whatever you will need in the format you will need it in.


Assuming the line: $this->load->vars($vars); is where you want to load your view, then it should be: $this->load->view('nameofview', $vars);

0

精彩评论

暂无评论...
验证码 换一张
取 消