【问题标题】:Difference in accessing variables in views在视图中访问变量的区别
【发布时间】:2014-05-25 21:11:58
【问题描述】:

我有两个控制器,一个是“上传”,它处理图像上传,另一个是“页面”,它现在处理 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

这两个访问级别有什么区别,一个是 $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();*** 

【问题讨论】:

    标签: arrays codeigniter views


    【解决方案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 显示图像。

    ====== 编辑

    您可以访问任意数量的模型并将该数据传递给视图。您有一个不同的问题 - 问题是您要等到视图发现 - 然后它使找出问题所在变得更加困难。

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

    当您遇到此类问题时,首先要做的是制作一个简单的视图,并直接从给您带来问题的模型方法中回显。它可能非常简单,但是您必须查看太多难以发现的代码。

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

    【讨论】:

    • 实际上我的问题不是我想要的,如果我从 image_m 模型和 page_m mdoel 发送了两个数据数组,而不是在视图中为什么我不能使用相同的语法我的 page_m 模型数组,即我可以访问 $images->image_title,因为我将其作为 $this->data['images'] 发送,同时我从页面发送了 $this->data['$get_with_images']模型但无法访问页表中的值 $get_with_images->page_title 它给了我提到的错误
    【解决方案2】:

    在你的视图上做一个var_dump($get_with_images) 给出的错误是你试图使用/访问$get_with_images 作为object,但它不是一个对象。

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

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

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

    【讨论】:

    • yes var_dump 给了我结果,这意味着它返回 true 但是要访问我需要使用 foreach 循环的值,但是对于 $data['images'] 情况下不需要循环它只是给我来自的数据通过将 -> 箭头键设置为 $images->image_title 的图像表,但 $get_no_parents->page_title 不是这种情况,为什么这种差异实际上是我想要理解的
    • @Mubbashir... 因为模型返回的数据是object。您对要返回的数据没有任何限制,您可以返回一个对象数组、一个多维数组、一个布尔值,但关键是由您决定返回什么,在您的情况下是 @987654327 @model 可以这么说返回一个一维对象。这就是为什么你不需要循环它。
    • 按照你说的方式实施后,我会在今晚尽快回复你
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-09
    • 1970-01-01
    相关资源
    最近更新 更多