Иногда бывает нужна функция, которая доступна везде и тут вам пригодится этот урок.
Куда ни глянь, всюду видишь уроки, в которых подобное решается через 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
Перевод: Алексей Широков
Наш Телеграм-канал — следите за новостями о Laravel.