Laravel: Как написать хелпер

Источник: «How to Create Custom Helper Functions in Laravel»
Хотите написать собственный хелпер в 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.

Дополнительные материалы

Предыдущая Статья

Laravel: Беспарольная аутентификация

Следующая Статья

Laravel: Хелперы массива которые нужно знать