Encodera

Спасибо, что читаете!

Пожертвуйте сайту, мы стараемся ради вас.

Оглавление

Помощники

Помощник (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 — и ошибка исчезнет на всех страницах.

Спасибо, что читаете!

Пожертвуйте сайту, мы стараемся ради вас.