Laravel — Создаём свои собственные функции

Laravel Helpers. Свои собственные функции

Иногда бывает нужна функция, которая доступна везде и тут вам пригодится этот урок.

Куда ни глянь, всюду видишь уроки, в которых подобное решается через autoload в composer’е. По определенным причинам, я считаю это решение неэстетичным и, как только файл helpers.php начинает расти, то он становится нечитабельным.

Лично я давно использую метод, когда можно создавать несколько файлов, содержащих функции. Что делает их гораздо более чистыми и понятными.

Давайте, начнём!

Прежде всего создаём сервис-провайдера HelperServiceProvider.php:

php artisan make:provider HelperServiceProvider

У нас появится новый файл в app\Providers под названием HelperServiceProvider.php

Удаляем весь метод boot(),  мы не будем его использовать.

Заменяем функцию register() на нашу:

public function register()
{
    foreach (glob(app_path('Helpers') . '/*.php') as $file) {
        require_once $file;
    }
}

Что она делает: в цикле прокручивает все файлы, находящиеся в каталоге app/Helpers. Как вы наверное уже догадались, в нём можно создавать php-файлы, которые будут автоматически подгружены в ваше приложение. В них и будем размещать хелперы (helpers — вспомогательные функции), которые будут доступны в любой части вашего кода (представления (views), модели, контроллеры и т.д.)

Загрузим наш провайдер. Открываем файл config/app.php и добавляем наш HelperServiceProvider над AppServiceProvider:

...

App\Providers\HelperServiceProvider::class,
App\Providers\AppServiceProvider::class,
App\Providers\AuthServiceProvider::class,
App\Providers\BroadcastServiceProvider::class,

...

Теперь давайте попробуем сделать простейшую функцию. Создаем новый файл с именем Carbon.php в папке app/Helpers со следующим содержимым:

<?php

/**
 * Carbon helper
 *
 * @param $time
 * @param $tz
 *
 * @return Carbon\Carbon
 */
function carbon($time = null, $tz = null)
{
    return new \Carbon\Carbon($time, $tz);
}

Нет необходимости использовать пространство имен. Хорошей идей будет проверить, существует ли функция, вызвав оператор function_exists.

Теперь мы можем использовать наш хелпер carbon() везде, где захотим. Допустим, что нам нужна другая функция, которая возвращает дату в определенном формате. Вы можете также разместить её в этом же файле Carbon.php:

<?php

/**
 * Carbon helper
 *
 * @param $time
 * @param $tz
 *
 * @return Carbon\Carbon
 */
function carbon($time = null, $tz = null)
{
    return new \Carbon\Carbon($time, $tz);
}

function carbonFormatted($time = null, $tz = null)
{
    return carbon($time, $tz)->format('Y-m-d')
}

Всё! Теперь вы можете начать заполнять каталог app/Helpers своими собственными PHP-файлами, которые будут содержать ваши часто используемые функции.

Автор: Dennis Smink
Перевод: Demiurge Ash