тк 3 июля праздник (в беларуси), буду не онлайн (по возможности буду отвечать)

Представления в 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'); } } ?>

Сделаем теперь файл /project/views/page/act.php с 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>

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