codeigniter: загрузка переменных и просмотр изнутри модели - PullRequest
0 голосов
/ 26 июля 2011

Я создаю сценарий загрузки изображений (впервые) в 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-> vars ()), они не загружаются, и когда загружается страница, я получаю ошибки "undefined variable". Я подозреваю, что невозможно передать переменные из модели в представление, даже когда представление загружено из модели, как я делал выше. Или, может быть, я просто что-то делаю неправильно (так как я немного n00b).

Ты бы даже пошел по этому маршруту? Имеет ли смысл передавать переменные в контроллер, а затем загружать представление из контроллера? Или что-то еще, что я не учел вообще? LOL

Любая помощь очень ценится. Заранее спасибо.

* редактировать: У меня также есть переменная $ image_path внутри

Ответы [ 2 ]

3 голосов
/ 26 июля 2011

Ты бы даже пошел по этому маршруту?Имеет ли смысл передавать переменные в контроллер, а затем загружать представление из контроллера?Или что-то еще, что я вообще не рассматривал?

Да, вообще говоря, несколько принято, чтобы ваши взгляды общались напрямую с моделью и наоборот, но только при использованиислой представления.В случае CI, я думаю, что лучше всего загружать все данные из вашего контроллера в ваше представление, когда вы визуализируете представление следующим образом:

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

Чтобы передать переменные из модели в контроллерВы можете вызывать методы в вашей модели следующим образом:

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

Чтобы определить эти методы получения в вашей модели, вы определяете функцию следующим образом:

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

Таким образом, вы создаете API вваши данные, и вы можете заставить получателя извлекать все, что вам нужно, в том формате, в котором вам это понадобится.

0 голосов
/ 26 июля 2011

Предполагая строку: $ This-> load-> вары ($ ВАР); где вы хотите загрузить свое представление, тогда оно должно быть: $ this-> load-> view ('nameofview', $ vars);

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...