post.jpg

Laravel - Пользовательские helper-функции

Иногда, при разработке веб-приложения на Laravel, требуется создать какую-то вспомогательную функцию, которая должна быть доступна из любого места вашего приложения. Обычно разработчики предлагают решать такие задачи простым добавлением файла с классом пользовательских функций в файл composer.json. Однако такой подход является довольно-таки примитивным и может привести к недоступности пользовательского метода из приложения по мере разрастания файла с классом.

Есть более гибкий метод для решения той же задачи,  когда вы можете объявить несколько файлов, каждый из которых содержит несколько методов, оставаясь при этом более доступными из любой точки приложения.

Прежде всего воспользуемся консолью приложения и создадим свой provider:


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;
    }
}

Созданный provider необходимо подгрузить в приложение, прописав его в файле config/app.php  раньше, чем указан ваш AppServiceProvider:


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

Таким образом внутри директории app/Helpers   вы можете создать несколько PHP файлов, и все они будут загружены приложением. Такие helper-функции будут доступны из любого места вашего кода (view, model, controller и т.д. ).

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


<?php

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

, то helper-функцию carbon() можно использовать где угодно в приложении. При этом не нужно указывать какое-либо пространство имен (namespacing) в месте вызова этого метода. Например, вызовем функцию в том же файле 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')
}

 

Поделиться

КОММЕНТАРИИ (0)