Правильный вывод информации

Рейтинг: 2Ответов: 1Опубликовано: 21.10.2014

Пишу на данный момент MVC приложение на PHP, и возник вопрос по поводу вывода информации, полученной из модели.

На данный момент реализация следующая. Каждый "главный" (вызываемый из контроллера) метод модели возвращает многомерный массив, ключами которого является "тип"(warn, stat, sites, etc) информации, а в значениях уже массив с данными.
Этот массив передается в следующий метод V:

public function generate($page, $data = null)
{
    if($data) {
        foreach($data as $x => $v) {
            if($x == 'warn') {
                $this->site_warning = $this->get_warning($v);
            }
            if($x == 'data') {
                $this->data = $v;
            }
            if($x == 'task') {
                if($v) {
                    foreach($v as $line) {
                        //...
                    }
                }
            }
            if($x == 'stat') {
                $this->stat = $v;
            }
        }
    }
    include('app/views/' . $page);
}

И в самих вьюшках я уже пишу:

if(isset($this->stat['zones'])) {
    foreach($this->stat['zones'] as $k => $v) {
        echo "<tr>";
        echo "<td>{$k}</td>";
        echo "<td>{$v}</td>";
        echo "</tr>";
    }
}

где $this->stat - свойство класса View, которое заполняется как раз в методе generate, когда ловится ключ 'stat'.

Правильный ли это подход или стоит сделать как-то иначе? Если да, то как именно? Спасибо.

Ответы

▲ 2Принят

Это не MVC, а пенитенциарное учреждение с плейсхлодерами. Тут ходи, тут спи, тут ешь, а тут, значит, вали. Не существует правил передачи/впаривания данных между слоями содержания и отображения. Принцип MVC не в организации этих каналов передачи, а в наличии самих слоев. Если они есть - паттерн, если нет - каша. Но вы сосредоточились на каналах.

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

model test
$this->data = 'Hello Word!';

view test
echo <h1><?php echo $this->data?></h1>

Вот и все.