# Представления в MVC на PHP

Давайте теперь добавим нашим действиям представления. По правилам нашего фреймворка представления хранятся в папке `/project/views/`.

Кроме того, в нашем фреймворке действует соглашение: имя файла с представлением должно совпадать с именем действия и размещаться в папке с таким же названием, как имя контроллера. Например, если у нас есть контроллер `PageController`, то все его представления следует хранить в папке `/project/views/page/`. Сам файл представления должен иметь расширение `.php`. К примеру, если в контроллере `PageController` будет действие `act`, то его представление следует размещать в `/project/views/page/act.php`.

Для того, чтобы задать представление какому-нибудь действию, это действие должно вызвать метод `render`, передав ему параметром имя представления. Имя представления должно состоять из имени контроллера с маленькой буквы, после которого через `/` будет записано имя действия

Метод `render` не нужно реализовывать в контроллере - он наследуется от родительского класса `Core\Controller`. Кроме того, для корректной работы результат работы метода следует вернуть через `return`.

Итак, пусть у нас есть контроллер `Page` с действием `act`. Давайте привяжем к этому действию представление:

`<?php namespace Project\Controllers; use Core\Controller; class PageController extends Controller { public function act() { return $this->render('page/act'); } } ?>`

Сделаем теперь файл с HTML кодом нашего представления:

`<div> это представление действия act контроллера page </div>`

Проделайте описанные манипуляции, а затем обратитесь к нашему действию через адресную строку. Убедитесь, что в браузере появится текст из созданного вами представления.

## Передача данных в представление

С помощью второго параметра метода `render` можно передавать данные из контроллера в представление. Данные следует передавать в виде ассоциативного массива. При этом в представлении ключи этого массива станут переменными с соответствующими значениями.

Давайте посмотрим на практике. Передадим в наше представление массив с тремя элементами:

`<?php namespace Project\Controllers; use Core\Controller; class PageController extends Controller { public function act() { return $this->render('page/act', [ 'var1' => 'eee', 'var2' => 'bbb', 'var3' => 'kkk', ]); } } ?>`

Как вы видите, ключи нашего массива - `'var1'`, `'var2'` и `'var3'`. Это значит, что в представлении будут доступны такие переменные и мы можем вывести их значения в нужных местах HTML кода. Сделаем это:

`<div> это представление действия act контроллера test </div> <ul> <li><?php echo $var1; ?></li> <li><?php echo $var2; ?></li> <li><?php echo $var3; ?></li> </ul>`

Проделайте описанные манипуляции, а затем обратитесь к нашему действию через адресную строку. Убедитесь, что в браузере появится текст из созданного вами представления.

## Передача массивов

В представление можно также передавать и массивы. Давайте, например, передадим массив юзеров:

`<?php namespace Project\Controllers; use Core\Controller; class PageController extends Controller { public function act() { return $this->render('page/act', [ 'header' => 'список юзеров', 'users' => ['user1', 'user2', 'user3'], ]); } } ?>`

Можно обратиться к каждому элементу массива:

`<h1><?= $header ?></h1> <ul> <li><?= $users[0]; ?></li> <li><?= $users[1]; ?></li> <li><?= $users[2]; ?></li> </ul>`

А можно перебрать массив циклом и сформировать нужный HTML код:

`<h1><?= $header ?></h1> <ul> <?php foreach ($users as $user): ?> <li><?= $user; ?></li> <?php endforeach; ?> </ul>`

Проделайте описанные манипуляции, а затем обратитесь к нашему действию через адресную строку. Убедитесь, что в браузере появится текст из созданного вами представления.

←→
↑