2

I am loading a view from a Controller file and that View loads another view which a final one as below,

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

I am using object here instead of an array as a passing variable between views. But if i use array, it works fine.

And the above code throwing error as like below,

Message: Attempt to assign property of non-object

Any help would be appreciated.

2

1 Answer 1

1

Yes, you may still pass through objects, but not at the 'first level', you'll need to wrap the object you want to pass through inside an array.

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

This is because when CodeIgniter will initialize the view, it will check the contents of the second view() parameter. If it's an object - it'll cast it to an array via get_object_vars() (See github link)

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

Which will in turn, turn your initial $data into:

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

Array ( [device_name] => Apple )

Thus to avoid this, nest your object inside an array() which will avoid being converted.

Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.