0

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:[email protected]">[email protected]</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

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

2 Answers 2

3

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.

Sign up to request clarification or add additional context in comments.

7 Comments

And how would you pass the variables from the model to the controller?
Have a read up on view_data here: codeigniter.com/user_guide/general/views.html
So I load the model function I currently have now but instead of loading the view there I have it return an array with the data I want to call in the view and then use the controller to load the view and the array?
Precisely. This way the model is only data and the view is only view.
Can I have an array of the variables I want called in the view from the model to the controller by saying: "return $vars"? Cuz that's what I tried and it is telling me that the variable is undefined even though I have a load->vars($vars) line in my controller.
|
0

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

1 Comment

I'm using a template library instead of load->view which should be doing the same thing anyway.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.