【问题标题】:Codeigniter passing objects within viewsCodeigniter 在视图中传递对象
【发布时间】:2015-09-14 10:24:04
【问题描述】:

我正在从控制器文件加载一个视图,该视图加载另一个视图,最后一个如下所示,

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

任何帮助将不胜感激。

【问题讨论】:

标签: php codeigniter codeigniter-2 codeigniter-3


【解决方案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() 中,这将避免被转换。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-27
    • 1970-01-01
    • 2016-11-29
    • 1970-01-01
    • 2018-06-30
    • 1970-01-01
    相关资源
    最近更新 更多