访问视图中的变量的差异

时间:2014-05-25 21:11:58

标签: arrays codeigniter views

我有两个控制器,一个是“上传”处理图像上传,另一个是“页面”处理CMS页面的创建现在,如果在我的“上传”控制器我加载两个模型,即'image_m'处理图片上传和“page_m”处理页面创建我突出显示相关代码我的问题是如果我访问视图中的变量

  1. $ this-> data ['images'] = $ this-> image_m-> get(); 由此发送我可以访问foreach循环为"$images->image_title, $images->image_path"
  2. 但此行***$this->data['get_with_images'] = $this->page_m->get_no_parents();***发送的变量为$ get_with_images-> page_name,$ get_with_images-> page_id等会产生给定错误

    遇到PHP错误

    严重性:注意

    消息:尝试获取非对象的属性

    文件名:upload / index.php

    行号:20

  3. 这两个访问级别之间的区别是一个$ image&其他用于$ get_with_images,因为我只能将其值作为$ get_with_images

    访问
    class Upload extends Admin_Controller {
        public function __construct() {
            parent::__construct();
            ***$this->load->model('image_m');
            $this->load->model('page_m');***
        }
        public function index($id = NULL) {
            //var_dump($this->data['images'] = $this->image_m->get_with_images());
            //$this->data['images'] = $this->image_m->get_with_images();
            ***$this->data['images'] = $this->image_m->get();***
            $this->data['subview'] = 'admin/upload/index';
    
            if ($id) {
                $this->data['image'] = $this->image_m->get($id);
                count($this->data['image']) || $this->data['errors'][] = 'Page Could not be found';
            }
            $id == NULL || $this->data['image'] = $this->image_m->get($id);
            /*this calls the page_m model function to load all the pages from pages table*/
            ***$this->data['get_with_images'] = $this->page_m->get_no_parents();*** 
    

2 个答案:

答案 0 :(得分:1)

您没有发布所有代码,因此很难说,但是因为您使用了$ this->在控制器中,你还没有在视图中做同样的事情?

在这种情况下,我建议不要使用$ this->因为没有必要。当你调用模型时,检查错误等也要好得多,比如

if ( ! $data['images'] = $this->image_m->get($id) ) {

  // Failure -- show an appropriate view for not getting any images 
  // am showing $data in case you have other values that are getting passed
     $this->load->view( 'sadview', $data );  } 

else {
   // Success -- show a view to display images     
   $this->load->view( 'awesomeview', $data );  }

所以我们说如果什么都没有回来 - 那!是否定的 - 然后显示失败视图。其他$ data [' images']回来了,它将传递给视图。请注意我没有必要使用$ this->对于任何事情,在视图中不需要它。

还建议使用单独的方法 - 有一个方法来显示所有图像和一个单独的方法,如returnimage($ id),以显示基于特定验证的$ id的图像。

======编辑

您可以根据需要访问任意数量的模型,并将该数据传递给View。您有一个不同的问题 - 问题是您要等到View才能找到 - 然后它弄清楚什么是错的更难。

查看此页面并确保您了解查询结果之间的差异 http://ellislab.com/codeigniter/user-guide/database/results.html

当你遇到这样的问题时,首先要做的是做一个简单的视图,然后直接从给你问题的模型方法中回显。它可能是非常简单的东西,但你必须仔细查看它很难发现的代码。

接下来的事情是,对于您编写的每种方法,您都需要问自己,如果它没有返回任何内容会怎样?'然后将这些条件作为代码的一部分处理。始终验证进入方法的任何输入(甚至链接),并始终为连接到数据库的任何方法提供回退。

答案 1 :(得分:0)

视图上执行var_dump($get_with_images)发出的错误是您尝试使用/访问$get_with_images作为object,但它不是对象

或者更好的是在你的控制器上做了

echo '<pre>';
var_dump($this->page_m->get_no_parents());
exit();

也许你的模型没有返回任何东西或返回的东西但是数据不是object,也许是在某些情况下仍然需要循环的对象数组。