вопрос воспламенителя кода: проблема с передачей переменной в представление - PullRequest
3 голосов
/ 21 сентября 2011

Я новичок в 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

Важность: Уведомление

Сообщение: неопределенная переменная: users

Имя файла: backOffice / dashboard.php

Номер строки: 9

Может кто-нибудь пролить свет, как я могу решить эту проблему?Я создаю другое представление без использования шаблона, и оно печатает массив.

1 Ответ

3 голосов
/ 21 сентября 2011

Вы не передаете переменную $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 в второе представление, второе представление преобразует все элементы $users в представление переменных, поэтому у нас теперь есть доступ к$row.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...