Полный цикл в digital

Как создать и подключить свои функции 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
Заполните форму уже сегодня!
Для начала сотрудничества необходимо заполнить заявку или заказать обратный звонок. В ответ получите коммерческое предложение, которое будет содержать индивидуальную стратегию с учетом требований и поставленных задач
Работаем по будням с 9:00 до 18:00. Заявки, отправленные в выходные, обрабатываем в первый рабочий день до 12:00.
Спасибо, ваш запрос принят и будет обработан!
Эйч Маркетинг