У меня есть следующий код в контроллере:
<?php
class Student extends CI_Controller
{
function index()
{
$data = $this->init->set();
$this->parser->parse('include/header', $data);
$this->parser->parse('student/student_index', $data);
$this->parser->parse('include/footer', $data);
}
function planner()
{
$data = $this->init->set();
$this->parser->parse('include/header', $data);
$this->parser->parse('student/student_cal', $data);
$this->parser->parse('include/footer', $data);
}
}
?>
Как видите, здесь много повторений. В принципе все. Я уже поместил свои переменные в модель, поэтому мне нужно каждый раз вызывать функцию модели вместо того, чтобы помещать весь массив $data в начало каждой функции. Во всяком случае, я попытался уменьшить повторение здесь, выполнив следующие действия:
<?php
class Student extends CI_Controller
{
function index()
{
$data = $this->init->set();
$this->parser->parse('include/header', $data);
switch($this->uri->segment(2))
{
case '': $this->home($data); break;
case 'planner': $this->planner($data); break;
}
$this->parser->parse('include/footer', $data);
}
function home($data)
{
$this->parser->parse('student/student_index', $data);
}
function planner($data)
{
$this->parser->parse('student/student_cal', $data);
}
}
?>
Это каким-то образом отлично работает для моей домашней страницы. Он анализирует переменные, и нет никаких проблем. Однако на странице «Планировщик» я получаю ошибки:
Сообщение: Отсутствует аргумент 1 для Student::planner()
Сообщение: Неопределенная переменная: данные
Сообщение: Недопустимый аргумент для foreach()
Я совершенно уверен, что получаю эти ошибки, потому что функция почему-то не получает массив $data
. Я также читал в документах CI, что третий сегмент в URL-адресе передается как аргумент, и в этом случае третий сегмент не существует, поэтому ничего не передается. Однако в документах CI не было сказано, как передать массив $data
из функции index()
в функцию planner()
. Мне также интересно, почему домашняя функция работает нормально, без ошибок.