2015-09-14 6 views
1

Я загружая вид из файла контроллера и View загружает другой вид, какой окончательный один, как показано ниже,Codeigniter передачи объектов в пределах просмотров

First view Call : 

    Controller: device.php 

     public function device_name(){ 
      $data = new stdClass; 
      $data->device_name = "Apple"; 
      $this->load->view('apple_device',$data); 
     } 

Second view call : 

    View: In apple_device.php 

     $device_name->count = 123; 
     $this->load->view('device_counts',$device_name); 

Я использую объект здесь вместо массива в качестве попутной переменной между видами. Но если я использую массив, он отлично работает.

И приведенный выше код бросает ошибку, как, как показано ниже,

Message: Attempt to assign property of non-object 

Любая помощь будет оценена.

+0

Вы должны передавать данные только в виде массива –

+0

№. Мы также можем передать объект в виде. Ссылка: https://ellislab.com/codeigniter/user-guide/general/views.html – Raja

ответ

1

Да, вы все равно можете проходить через объекты, но не на «первом уровне», вам нужно будет обернуть объект, который вы хотите пройти через массив.

public function device_name(){ 
    $mobiles = new stdClass; 
    $mobiles->device_name = "Apple"; 
    $data = array("mobiles" => $mobiles); 
    $this->load->view('apple_device',$data); 
} 

Это происходит потому, что когда CodeIgniter будет инициализировать вид, она будет проверять содержимое второго view() параметра. Если это объект - он будет отбрасывать его в массив с помощью get_object_vars() (см github link)

protected function _ci_object_to_array($object) 
{ 
    return is_object($object) ? get_object_vars($object) : $object; 
} 

Который, в свою очередь, превратит ваш первоначальный $data в:

$data = new stdClass; 
$data->device_name = "Apple"; 
$example = get_object_vars($data); 
print_r($example); 

Array ([device_name] => Apple) 

Таким образом, чтобы избежать этого, гнездо ваш объект находится внутри array(), который не будет преобразован.

+0

Замечательно! Огромное спасибо :) – Raja

Смежные вопросы