Какова наилучшая практика для отображения нескольких представлений в Codeigniter? - PullRequest
2 голосов
/ 01 августа 2009

Я пытаюсь определить наилучшую практику для вызова нескольких представлений из одного и того же метода в контроллере.

Желательно ли в контроллере сделать один вызов представления, а затем сделать так, чтобы этот просмотр вызывал все необходимые ему представления или вызывал все необходимые представления последовательно в контроллере?

Пример:

function index(){
   //set all data variables
   //then send them to the view
   $this->load->view($index_view, $data);
}

или

function index(){
  //set variables
  //then call each view
  $this->load->view($header_view, $header_data);
  $this->load->view($body_view, $body_data);
  $this->load->view($footer_view, $footer_data);

Руководство по Codeigniter показывает оба пути, но, похоже, не советует лучшую практику ... есть ли один?

Ответы [ 5 ]

9 голосов
/ 18 августа 2009

Мне не нравился способ включения верхнего / нижнего колонтитула в представление, и мне не нравилась загрузка нижнего и нижнего колонтитула каждый раз в каждой отдельной функции контроллера.

Чтобы исправить это, я расширил класс Controller с помощью собственной функции отображения представления.

<?php
// in application/libraries/MY_Controller.php
class MY_Controller extends Controller {
    function _displayPage($page, $data = array()) {
        $this->view->load('header', $data);
        $this->view->load($page, $data);
        $this->view->load('footer', $data);
    }
}
?>

// in application/controllers/home.php
<?php
class Home extends MY_Controller {
    function index() {
        $this->_displayPage('home/index', array('title' => 'Home'));
    }
}
?>

Не уверен, является ли CodeIgniter «лучшей практикой», но это имеет смысл для меня.

1 голос
/ 16 августа 2009

Я бы сказал, что контроллер должен отображать только один вид. Тогда это до представления, хочет ли он показать заголовок, нижний колонтитул, боковую панель или что-то еще. Контроллер не должен заботиться, его задача - получать данные из модели и передавать их в представление. Не решить, должен ли вид иметь верхний и нижний колонтитулы.

1 голос
/ 03 августа 2009

Не думаю, что на это есть однозначный ответ. Выберите один и придерживайтесь его, важно быть последовательным.

Во всяком случае, я бы предпочел второй.

0 голосов
/ 02 сентября 2012

Это ожидаемое поведение. Как только переменные установлены, они становятся доступными в классе контроллера и его файлах просмотра. Отправка массива в $ this-> load-> view () - это то же самое, что отправка массива напрямую в $ this-> load-> vars () перед вызовом файла представления. Это упрощает для большинства людей использование нескольких представлений в контроллере. Если вы используете несколько файлов представлений в одном контроллере и хотите, чтобы у каждого из них был свой набор переменных, вам необходимо вручную очистить массив $ this-> load -> _ ci_cached_vars между вызовами представления.

Комментарий кода в классе Loader описывает другую ситуацию, показывающую, почему это желаемое поведение по умолчанию:

  • Вы можете установить переменные, используя выделенную функцию $ this-> load_vars ()
  • или через второй параметр этой функции. Мы объединим
  • двух типов и кешируем их так, чтобы представления, встроенные в
  • другие представления могут иметь доступ к этим переменным.
0 голосов
/ 17 августа 2009

Согласитесь с Кристианом Давеном: его логика просмотра / отображения, а не данные или бизнес / логика. по сути, это то же самое, что использование php include для таких фрагментов, как навигация, нижний колонтитул и т. д. Вы просто встраиваете разметку.

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