Как создать и подключить свои функции Helpers
Хелперы могут быть весьма полезны в Laravel проектах. Они помогают упростить код в проекте простым и понятным способом. В Laravel уже есть множество встроенных хелперов, dd()
, abort()
, session()
. По мере роста проекта вы обнаружите потребность в собственных хелперах. В этой статье мы рассмотрим, как создавать и использовать наши собственные вспомогательные PHP функции в Laravel.
Создание функции хелпера
Создание собственного хелпера необходимо начать с создания PHP файла в котором будет размещён код функции. Давайте создадим файл helpers.php
в каталоге app/Helpers
нашего приложения. Кстати, его расположение зависит от личных предпочтений.
Когда у нас есть файл, мы можем добавить к нему наш хелпер в виде вспомогательной функции. В качестве примера для этой статьи мы создадим супер простую функцию, которая преобразует секунды в часы:
app/Helpers/helpers.php<?php
if (! function_exists('seconds_to_hours')) {
function seconds_to_hours(int $seconds): float
{
return $seconds / 3600;
}
}
Как видно из примера наш хелпер — довольно простая функция. Однако, вы можете заметить одну вещь, имя функции написано в snake case
регистре, seconds_to_hours
. Вам необязательно использовать snake case
для имени хелпера, но все хелперы Laravel написаны именно так. Советую использовать этот формат, что бы следовать стандарту.
Обязательно нужно заключать имя функции в if
. Сделано для того, что бы случайно не переопределить уже зарегистрированный хелпер с таким же именем. Мы можем использовать пакет, в котором уже была зарегистрирована функция seconds_to_hours()
, на экране будет ощибка.
При создании вспомогательных функций важно помнить, что они должны использоваться только как хелперы. На самом деле они не предназначены для выполнения какой-либо бизнес-логики, а скорее для того, что бы привести в порядок ваш код.
Регистрация хелпера
Когда мы создали хелпер, необходимо его зарегистрировать для доступа к новой функции. Для этого, обновляем наш composer.json
, чтобы файл загружался во время каждого запроса и был доступен для использования. Laravel включает загрузчик классов composer в файле public/index.php
.
В вашем файле composer.json
есть раздел autoload
. В этом разделе нужно добавить следующие строки, что бы composer
знал, что вы хотите загрузить свой файл:
composer.json"files": [
"app/Helpers/helpers.php"
],
Раздел autoload
вашего файла composer.json
теперь должен выглядеть так:
composer.json"autoload": {
"files": [
"app/Helpers/helpers.php"
],
"psr-4": {
"App\\": "app/",
"Database\\Factories\\": "database/factories/",
"Database\\Seeders\\": "database/seeders/"
}
},
После того как мы в ручную обновили composer.json
нам необходимо выполнить следующую команду, что бы выгрузить наш файл автозагрузки и создать новый:
composer dump-autoload
Использование хелпера
Ваш хелпер должен быть полностью настроен и готов к использованию. Что бы использовать его, вы можете просто вставить в код:
echo seconds_to_hours(331);
Поскольку он зарегистрирован как глобальная функция, вы можете использовать его в контроллерах, сервисных классах и даже других хелперах. Что мне больше всего нравиться в хелперах, это возможность использовать их в шаблонах Blade. Например, у нас есть класс TimeServiceClass
, содержащий метод secondsToHours()
, выполняющий то же самое, что и наша вспомогательная функция. Если бы мы использовали сервисный класс в нашем шаблоне Blade, нам, пришлось бы сделать что-то вроде этого:
{{ \App\Services\TimeService::secondsToHours(331) }}
Узнав как можно регистрировать хелперы, мы рассмотрим ещё один шаг вперёд. По мере роста ваших Laravel проектов, вы обнаружите, что у вас большое количество вспомогательных функций, которые находятся в одном файле. Как вы понимаете, этот файл будет выглядеть неорганизованно. Нам следует подумать о разделении наших хелперов на отдельные файлы.
Представим, что у нас множество хелперов в файле app/Helpers/helpers.php
, некоторые из них связаны с деньгами, некоторые со временем, а не которые с пользовательскими настройками. Мы могли бы начать разделение этих функций на отдельные файлы, такие как: app/Helpers/money.php
, app/Helpers/time.php
и app/Helpers/settings.php
. После этого нам нужно обновить наш composer.json
:
composer.json"autoload": {
"files": [
"app/Helpers/money.php",
"app/Helpers/settings.php",
"app/Helpers/time.php",
],
"psr-4": {
"App\\": "app/",
"Database\\Factories\\": "database/factories/",
"Database\\Seeders\\": "database/seeders/"
}
},
Не забывайте сбрасывать дамп автозагрузки composer выполняя следующую команду:
composer dump-autoload