Помощники
Помощник (helper) — файл с набором обычных функций на одну тему: адреса, формы, текст. Функции помощника вызывают без объектов и классов, поэтому они особенно удобны в шаблонах. Встроенные помощники лежат внутри фреймворка, свои — в папке app/Helpers.
Подключение
Помощник подключают по имени функцией helper():
// app/Controllers/Posts.php
public function index(): string
{
helper('text');
return word_limiter('Очень длинный текст первой статьи блога', 3);
}Страница выведет первые три слова и многоточие: «Очень длинный текст…». Функция word_limiter() принадлежит помощнику text и до вызова helper('text') недоступна.
Помощник url
Помощник url подключён всегда — его функции можно вызывать сразу:
| Функция | Что возвращает |
|---|---|
site_url('posts/5') | Полный адрес страницы |
base_url('css/app.css') | Адрес файла из папки public |
url_to('posts.show', 5) | Адрес по имени маршрута |
current_url() | Адрес текущей страницы |
anchor('posts', 'Все статьи') | Готовый тег ссылки |
url_title('Привет, мир', '-', true) | Строку, пригодную для адреса |
Пример в шаблоне:
<!-- app/Views/partials/nav.php -->
<nav>
<?= anchor('posts', 'Все статьи') ?>
<a href="<?= site_url('posts/new') ?>">Новая статья</a>
</nav>
<link rel="stylesheet" href="<?= base_url('css/app.css') ?>">Обе ссылки получат полный адрес вида http://localhost:8080/posts. Основа адреса берётся из настройки app.baseURL, о которой рассказывает следующий урок.
Автоматическое подключение
Чтобы не вызывать helper() в каждом методе, перечислите нужные помощники в свойстве $helpers класса BaseController:
// app/Controllers/BaseController.php
protected $helpers = ['form', 'text'];Теперь функции этих помощников доступны во всех контроллерах и их шаблонах.
Свой помощник
Собственные функции складывают в файл, имя которого заканчивается на _helper.php. Создайте вручную app/Helpers/blog_helper.php:
// app/Helpers/blog_helper.php
function reading_time(string $text): string
{
$words = count(preg_split('/\s+/u', trim($text)));
$minutes = max(1, (int) ceil($words / 200));
return "$minutes мин. чтения";
}Подключается он так же, по имени без окончания: helper('blog'). После этого в шаблоне можно написать <?= reading_time($post['body']) ?>.
Другие встроенные помощники
| Имя | Для чего |
|---|---|
form | Теги форм и вывод ошибок |
text | Обрезка и обработка текста |
number | Форматирование чисел и размеров файлов |
html | Теги картинок, списков, стилей |
filesystem | Работа с файлами и папками |
Частая ошибка
Сообщение «Call to undefined function» в шаблоне почти всегда значит, что помощник не подключён. Функции old(), form_open(), word_limiter() не существуют, пока не вызван helper() с нужным именем. Добавьте помощник в $helpers в BaseController — и ошибка исчезнет на всех страницах.