Передача переменной из контроллера для просмотра в CodeIgniter

Я новичок в Codeigniter и OOP PHP.

контроллер:

public function index(){ $this->load->model('main_model'); $planet = $this->main_model->solar(); $this->load->view('main_view', $planet); } 

Если echo $planet в контроллере делает то, что он должен делать. Если я вернусь к echo $planet в представлении, я получу неопределенную переменную ошибку. $planet – это не массив. Почему переменная $planet не передается в представление?

Я знаю, что это простой и простой вопрос, и я смущен, что не могу понять, что я делаю неправильно.

EDIT: Ладно, после того, как я снова начал играть, я получил его на работу. Могут ли переменные передаваться только из Controller в View, когда они отформатированы как массив?

    Вы должны передать массив в представление. CodeIgniter автоматически делает $planet доступным для вас.

     $data = array('planet' => $planet); $this->load->view('main_view', $data); 

    С этим вы можете использовать $planet на ваш взгляд.

    Например, если вы выполните следующее:

     $data = array('foo' => 'Hello', 'bar' => 'world'); $this->load->view('main_view', $data); 

    $foo и $bar будут доступны на ваш взгляд. Пара ключей-значений в массиве автоматически преобразуется в переменные в представлении.

    Вы можете передать либо массив, либо объект в представление. Затем вы можете получить доступ к ключу массива в виде переменной (ов) в вашем представлении.

    контроллер

    массив

     public function index() { $this->load->model('main_model'); $planet_data['planet'] = $this->main_model->solar(); $this->load->view('main_view', $planet_data); } 

    объект

     public function index() { $this->load->model('main_model'); $planet_data = new stdClass(); //Creates a new empty object $planet_data->planet = $this->main_model->solar(); $this->load->view('main_view', $planet_data); } 

    Из руководства CodeIgniter : Примечание. Если вы используете объект, переменные класса будут преобразованы в элементы массива.

    Посмотреть

    Независимо от того, как вы передаете данные, его можно отобразить следующим образом:

     <?php echo $planet; ?> 

    Если это массив, вам нужно будет перебирать его. Или объект, затем обращайтесь к его переменным-членам.


    По моему опыту использование массива более распространено, чем использование объекта.

    это как сделать это легко

     public function index() { $this->load->model('main_model'); $data['planet'] = $this->main_model->solar(); $this->load->view('main_view', $data); } 

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

     echo $planet; 

    Попробуйте:

     public function index(){ $this->load->model('main_model'); $data['planet'] = $this->main_model->solar(); $this->load->view('main_view', $data); } 

    и, на ваш взгляд, вы можете получить доступ к «планете». Это ответ. Если это полезно

    вы можете передать переменную в URL-адресе

     function regresion($value) { $data['value'] = $value; $this -> load -> view('cms/template', $data); } 

    В представлении

     <?php print_r($value);?> 

    Если модальный содержит ответ массива:

     public function solar() { $data['earth'] = 'Earth'; $data['venus'] = 'Venus'; return $data; } 

    то у вас есть данные для просмотра следующим образом:

     public function index(){ $this->load->model('main_model'); $planet = $this->main_model->solar(); $this->load->view('main_view', $planet); } 

    Но при просмотре у вас будут такие данные доступа:

     echo $earth; echo $venus; 

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

     public function index(){ $this->load->model('main_model'); $planet['planet'] = $this->main_model->solar(); $this->load->view('main_view', $planet); } 

    и в файле просмотра вы можете получить доступ к следующим данным:

     print_r($planet); 

    Если вы не знаете, какие данные будут отображаться, просто используйте этот код в представлении:

     print_r($this->_ci_cached_vars);