Я новичок в 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);