Laravel: Как написать хелпер
Одна из ключевых особенностей Laravel — встроенные вспомогательные функции (хелперы). Эти функции помогают ускорить процесс разработки. Хэлперы, такие, как env()
, config()
, и dd()
, стали нормой в Laravel, и мы их ежедневно используем.
Несмотря на то, что в Laravel множество встроенных функций хелперов, иногда встроенных хелперов недостаточно для удовлетворения потребностей. В таких случаях важно знать, как создавать хелперы.
Давайте начнём!
Что такое хелпер
В Laravel хелпер — это, по сути, многократно используемые фрагменты кода, которые можно использовать во всём приложении. Эти функции предназначены для упрощения общих задач и уменьшения дублирования кода, делая ваш код более читабельным и простым в обслуживании.
В чём преимущества хелперов в Laravel
Есть несколько преимуществ создания хелперов в Laravel:
- Возможность повторного использования кода. Пользовательские вспомогательные функции — хелперы, можно использовать несколько раз в приложении, что снижает количество дублированного кода и делает код более удобным в сопровождении.
- Улучшенная читаемость. Хелперы делают код более понятным и читабельным. Абстрагируя сложный код в одну функцию с описательным именем, вы можете эффективно передать цель кода.
- Гибкость. Хелперы дают больше контроля над тем, как работает ваше приложение. Создавая свои собственные функции, вы можете адаптировать их к своим конкретным потребностям и сделать ваше приложение более эффективным.
- Организованность кода. Хелперы помогают поддерживать порядок в коде, разделяя его на логические функции с разными обязанностями. Это может сделать ваш код более модульным и более удобным для чтения.
Создание пользовательской вспомогательной функции — хелпера в Laravel
Для написания собственного хелпера вы можете выполнить следующие шаги.
Создайте папку Helpers и файл хелпер
Прежде чем создать файл хелпер необходимо создать папку в которой будут храниться хелперы. Я создаю папку Helpers
в app
(app\Helpers\
). Теперь в ней можно создать файл helpers.php
.
Создайте Сервис Провайдер
Нам нужно создать сервис провайдер, в котором мы сможем зарегистрировать наши хелперы. Это можно сделать одной командой Artisan:
php artisan make:provider HelperServiceProvider
В методе register()
мы зарегистрируем все хелперы для этого приложения.
//App/Providers/HelperServiceProvider.php
<?php
namespace App\Providers;
use Illuminate\Support\ServiceProvider;
class HelperServiceProvider extends ServiceProvider
{
/**
* Register services.
*/
public function register(): void
{
$files = glob(app_path('Helpers') . "/*.php");
foreach ($files as $key => $file) {
require_once $file;
}
}
/**
* Bootstrap services.
*/
public function boot(): void
{
//
}
}
Мы используем php функцию glob()
для поиска всех хелперов, файлов с расширением .php
по указанному пути (app\Helpers\
).
Затем мы подключаем файлы, как часть Laravel, и когда приложение загружается, хелперы регистрируются в контейнере приложения.
Следующий шаг, регистрация HelperServiceProvider
в файле config/app.php
.
//config/app.php
<?php
...
'providers' => [
App\Providers\HelperServiceProvider::class,
],
...
Определение хелперов
Теперь, когда наши хелперы загружены
мы можем начать создавать хелперы.
Теперь в файле app\Helpers\helper.php
я могу добавить свои вспомогательные функции. Я создам простой хелпер загружающий файлы.
//App/Helpers/helper.php
<?php
use Illuminate\Support\Str;
use Illuminate\Http\UploadedFile;
if (!function_exists('UploadFile')) {
/**
* This function uploads files to the filesystem of your choice
* @param \Illuminate\Http\UploadedFile $file The File to Upload
* @param string|null $filename The file name
* @param string|null $folder A specific folder where the file will be stored
* @param string $disk Your preferred Storage location(s3,public,gcs etc)
*/
function UploadFile(UploadedFile $file, $folder = null, $filename = null, $disk = 's3')
{
$name = is_null($filename) ? $filename : Str::random(10);
return $file->storeAs(
$folder,
$name . "." . $file->getClientOriginalExtension(),
$disk
);
}
}
Я использую хелпер function_exists()
, чтобы гарантировать, что функция будет доступна только в том случае, если она не существует в экземпляре приложения. При этом функция доступна глобально в Laravel приложении, её можно использовать где угодно.
Использование хелпера
Я создам контроллер и буду использовать свой хелпер.
php artisan make:controller FileController
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
class FileController extends Controller
{
public function upload(Request $request)
{
$file_path = UploadFile($request->file('file'), 'Products'); //Использование собственного хелпера для загрузки файлов
}
}
Как видите, я использую собственный хелпер в контроллере для загрузки файлов в Amazon S3 Bucket.
Вы можете создавать столько хелперов, сколько захотите, и повысите свою производительность при разработке с Laravel.
Заключение
Пользовательские хелперы позволяют создавать многократно используемые фрагменты кода и делать код более эффективным, организованным и удобным в сопровождении.
Создавая собственные хелперы, вы можете упростить разработку, уменьшит дублирование кода, сделать его более читабельным и модульным. Кроме того, хелперы дают больший контроль над тем, как работает ваше приложение, позволяя адоптировать код к конкретным потребностям и сделать приложение более эффективным.
PS
Это второй подход к созданию хелперов в Laravel описанный на сайте. Предыдущая статья была опубликована полтора года назад Laravel: Как создать функцию хелпер. Использовалась то же место хранения хелперов app\Helpers
, но хелперы подключались к проекту через автозагрузку Composer.