Передача переменной из контроллера для просмотра в 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
в представлении, я получаю ошибку переменной undefined. $planet
не является массивом. Почему переменная $planet
не передается в представление?
Я знаю, что это простой и простой вопрос, и я смущен, что не могу понять, что я делаю неправильно.
РЕДАКТИРОВАТЬ: Хорошо, после того, как я снова начал играть, я заставил его работать. Могут ли переменные передаваться только из Controller в View, когда они отформатированы как массив?
Ответы
Ответ 1
Вам нужно передать массив в представление. 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
будут доступны в вашем представлении. Пара ключей-значений в массиве автоматически преобразуется в переменные в представлении.
Ответ 2
Вы можете передать либо массив, либо объект в представление. Затем вы можете получить доступ к ключу массива в виде переменной (ов) в вашем представлении.
контроллер
Массив
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; ?>
Если это массив, вам нужно будет перебирать его. Или объект, затем получите доступ к его переменным-членам.
В моем опыте использование массива более распространено, чем использование объекта.
Ответ 3
вот как это сделать легко
public function index() {
$this->load->model('main_model');
$data['planet'] = $this->main_model->solar();
$this->load->view('main_view', $data);
}
Теперь вы можете получить доступ к этому значению таким образом
echo $planet;
Ответ 4
Попробуйте:
public function index(){
$this->load->model('main_model');
$data['planet'] = $this->main_model->solar();
$this->load->view('main_view', $data);
}
и при вашем представлении вы можете получить доступ к "$ planet". Это ответ. answer, если он полезен
Ответ 5
вы можете передать переменную в URL-адресе на
function regresion($value) {
$data['value'] = $value;
$this -> load -> view('cms/template', $data);
}
В представлении
<?php print_r($value);?>
Ответ 6
Если модальный содержит ответ массива:
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);