2011-09-21 38 views
3

我使用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; 
    } 
    } 
} 

這裏是我的CONTROLER:

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

我收到以下錯誤:

A PHP Error was encountered

Severity: Notice

Message: Undefined variable: users

Filename: backOffice/dashboard.php

Line Number: 9

任何人都可以提供一些線索我怎麼能解決這個問題?我不使用模板創建另一個視圖,並打印數組。

回答

3

您沒有將$users變量傳遞給第二個(嵌套)視圖。

我建議在$data數組中添加$users,然後在第一個視圖中將$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傳遞給第二個視圖時,第二個視圖將所有元素$users轉換爲查看變量,因此我們現在可以訪問$row

+0

謝謝亞歷克斯。 不僅代碼的作品,但從你的答案,我意識到我的錯誤。 感謝您的時間和分享您寶貴的知識。 問候,Zoreli – Zoran

相關問題