В прошлых видеоуроках мы рассмотрели основы модулей и маршрутизации. Однако наш первый контроллер возвращал только чистую строку. Давайте рассмотрим рендеринг представлений (view).
Рендеринг представления из действия контроллера
Для передачи параметров в рендерер представления, действие (action) контроллера возвращает PHP массив. Зарезервированный ключ $view содержит параметры для рендерера представления, например имя файла представления для рендеринга.
public function indexAction()
{
return [
'$view' => [
'title' => 'TODO management',
'name' => 'todo:views/admin/index.php'
],
'message' => 'Hello how's it going?'
];
}
Отображенное представление может быть простым PHP шаблоном. Простые параметры (например, message
) доступны как переменные PHP (например, $message
).
<h3><?php echo $message; ?></h3>
Сокращение пути ресурсов
Вместо того чтобы ссылаться на полный путь файла, мы можем использовать сокращённый синтаксис. packages/pagekit/todo/views/admin/index.php превращается в todo:views/admin/index.php
. Это быстрее печатать и проще читать.
Вы можете зарегистрировать сокращения с помощью целевого пути в вашем index.php. В нашем примере мы хотим указать todo:
на текущий путь index.php.
'resources' => [
'todo:' => ''
],
Конфигурация модуля
У модуля может быть конфигурационный массив, который содержит любые типы настроек. Мы можем использовать это как простое хранилище наших TODO элементов:
'config' => [
'entries' => [
['message' => 'Buy milk.', 'done' => false], // ...
]
],
Из контроллера мы можем получить доступ к этому конфигу в качестве свойства объекта модуля:
src/Controller/TodoController.php:
use Pagekit\Application
// ...
$module = App::module('todo');
$config = $module->config;
// ...
Мы можем сохранять изменения конфига модуля в базу данных. Изменения из дефолтного конфига модуля сливаются с сохранёнными изменениями, так что мы всегда имеем валидную конфигурацию в контроллере.
// Изменяем конфиг модуля
App::config('todo')->set('entries', $entries);