Шаблоны
Шаблон (вид) — файл с разметкой HTML, в которую подставляются данные. Контроллер готовит данные, шаблон отвечает только за то, как они выглядят. Шаблоны CodeIgniter — обычные файлы PHP в папке app/Views; отдельного языка шаблонов нет.
Первый шаблон
Команды для шаблонов нет — файл создают вручную. Создайте папку app/Views/posts и в ней файл index.php:
<!-- app/Views/posts/index.php -->
<h1>Статьи</h1>
<p>Здесь будет список статей.</p>Выводит шаблон функция view() в контроллере:
// app/Controllers/Posts.php
public function index(): string
{
return view('posts/index');
}Откройте /posts — появится заголовок «Статьи». Имя шаблона пишут относительно app/Views и без расширения .php.
Передача данных
Второй аргумент view() — массив. Его ключи становятся переменными шаблона:
public function index(): string
{
$posts = [
['id' => 1, 'title' => 'Первая статья'],
['id' => 2, 'title' => 'Вторая статья'],
];
return view('posts/index', ['posts' => $posts]);
}Пока статьи записаны прямо в коде; во второй главе они будут приходить из базы данных.
Вывод значений и циклы
Запись <?= ... ?> выводит значение. Для циклов и условий в шаблонах используют форму с двоеточием:
<!-- app/Views/posts/index.php -->
<h1>Статьи</h1>
<?php if ($posts === []): ?>
<p>Статей пока нет.</p>
<?php else: ?>
<ul>
<?php foreach ($posts as $post): ?>
<li>
<a href="<?= url_to('posts.show', $post['id']) ?>"><?= esc($post['title']) ?></a>
</li>
<?php endforeach ?>
</ul>
<?php endif ?>На странице /posts появится список из двух ссылок. Адреса строит url_to() по имени маршрута posts.show из прошлых уроков.
Экранирование
Функция esc() превращает опасные символы в безопасный текст: угловые скобки тега станут видимыми знаками, а не разметкой. Вторым аргументом задают место, куда вставляется значение:
| Вызов | Где применять |
|---|---|
esc($text) | Текст между тегами |
esc($text, 'attr') | Значение атрибута |
esc($text, 'js') | Строка внутри JavaScript |
Частая ошибка
Запись <?= $post['title'] ?> без esc() выводит значение как есть: тег script из заголовка выполнится в браузере посетителя. CodeIgniter не экранирует вывод автоматически — оборачивайте в esc() каждое значение, пришедшее от пользователя или из базы.