【问题标题】:code igniter question: problem with passing variable to a viewcodeigniter 问题:将变量传递给视图的问题
【发布时间】:2011-09-21 19:15:59
【问题描述】:

我是 CodeIgniter (2.03) 的新手,遇到以下问题:

这是我的主要模板(视图):

<?php $this->load->view('backOffice/bo_header_in'); ?>

<?php $this->load->view($bo_main_content); ?>

<?php $this->load->view('backOffice/bo_footer_in'); ?>

这是我的模型:

<?php

class Back_office_users extends CI_Model 
{

  public function getAllUsers () 
  {
    $query = $this->db->query("SELECT * FROM users");

    if ($query->num_rows() > 0) {
      foreach ($query->result() as $rows) {
        $users[] = $rows;
      }
      return $users; 
    }
  }
}  

这是我的控制器:

<?php

class Dashboard extends CI_Controller 
{

  public function __construct() 
  {
    parent::__construct();
    $this->is_logged_in();
  }

  public function index () 
  {   
    $this->load->model('back_office_users');
    $users['rows'] = $this->back_office_users->getAllUsers();

    $data['bo_main_content'] = "backOffice/dashboard";

    $this->load->view('backOffice/bo_template_in', $data, $users);

   // if I pass the variable like this it works just fine...
   //$this->load->view('backOffice/users', $users);
  }

  public function is_logged_in()
  {
    $is_logged_in = $this->session->userdata('is_logged_in');
    if (!isset($is_logged_in) || ($is_logged_in != true)) {
      $this->accessdenied();   
    }
  }

  public function accessdenied () 
  {    
    $data['bo_main_content'] = 'backOffice/accessdenied';
    $this->load->view('backOffice/bo_template', $data);
  }

  public function logout () 
  {    
    $this->session->sess_destroy();
    redirect('backOffice/index');
  }
}  

仪表板视图是这样的:

<?php
  print_r($users);
?> 

我收到以下错误:

遇到了 PHP 错误

严重性:通知

消息:未定义变量:用户

文件名:backOffice/dashboard.php

行号:9

谁能告诉我如何解决这个问题?我在不使用模板的情况下创建了另一个视图,并打印了数组。

【问题讨论】:

    标签: php codeigniter


    【解决方案1】:

    您没有将 $users 变量传递给第二个(嵌套)视图。

    我建议将$users 添加到$data 数组,然后在第一个视图中将$users 数组传递给嵌入视图。所以,在你的控制器中:

    public function index () {
    
      /* stuff... */
    
      $data['users']['rows'] = $this->back_office_users->getAllUsers();
    
      $data['bo_main_content'] = "backOffice/dashboard";
    
      /* stuff... */
    
      $this->load->view('backOffice/bo_template_in', $data);
    }
    

    然后在主视图中:

    <?php $this->load->view($bo_main_content, $users); ?>
    

    然后在仪表板视图中:

    <?php
      print_r($rows);
    ?>
    

    这是因为在主视图中,如您所知,CodeIgniter 将$data 的所有元素转换为变量,所以我们最终会得到$users 变量。 $users 是一个包含rows 的数组,所以当我们将$users 传递给second 视图时,第二个视图将$users 的所有元素转换为视图变量,因此我们现在可以访问到$row

    【讨论】:

    • 谢谢亚历克斯。不仅代码有效,而且从您的回答中,我意识到我的错误。感谢您的宝贵时间和分享您的宝贵知识。问候,佐雷利
    猜你喜欢
    • 1970-01-01
    • 2011-09-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-09
    相关资源
    最近更新 更多