Макросы в laravel – Делайте больше, чем вам могут предложить

Макросы в laravel

Фреймворк Laravel – это довольно сильный фреймворк. Вы постоянно удивляетесь, когда глубоко погружаетесь в его структуру из-за ее красоты, расширяемости и искусства кода. В этой статье я собираюсь представить еще одну классную особенность Laravel – макросы. Это дает вам больше гибкости для расширения основных классов Laravel! Вы можете сделать больше вещей с помощью функции макроса, которая по умолчанию не предлагается Laravel! Большинство основных классов Laravel являются макро-управляемыми, которые я перечислю в конце этой статьи.

Давайте поговорим о реальном примере, когда мы делаем RESTful API, нам нужно дать ответ в стандартном формате JSON. Обычно мы даем примерно следующий ответ нашего API

// for success
return response()->json(['success' => true,'message' => 'Successful']);
//for fail
return response()->json(['success' => false,'message' => 'Failed']);

Делаем макрос в Laravel

Давайте добавим классу response новый метод success, который будет отдавать данные в едином формате. Для этого мы можем использовать наши макросы. Давайте так и сделаем. Нам нужно сделать наш собственный макрос в методе загрузки AppServiceProvider.php

//app/Providers/AppServiceProvider.php
public function boot()
{  
    Response::macro('success', function ($message) {
        return ['success' => true,'message' => $message];
    });

    Response::macro('fail', function ($message) {
        return ['success' => false,'message' => $message];
    });
}

Использование макросов в Laravel

– Готово! теперь мы можем использовать successи failметоды из класса Response во всем нашем приложении, как показано ниже.

Успешное действие

return response()->success('Successful');

Вывод

{
  "success": true,
  "message": "Successful"
}

Ошибочное действие

return response()->fail('Failed!');

Вывод

{
  "success": true,
  "message": "Failed!"
}

Несколько макросов

Если нам нужно больше макросов, то метод AppServiceProvider::boot будет все больше и больше. В этой ситуации мы можем использовать микширование в app/Mixins

namespace App\Mixins;

use Illuminate\Support\Facades\Response;

class ReponseMixin
{
    Response::macro('success', function ($message) {
        return ['success' => true,'message' => $message];
    });

    Response::macro('fail', function ($message) {
        return ['success' => false,'message' => $message];
    });

    Response::macro('data', function ($data) {
        return ['success' => false,'data' => $data];
    });
}

теперь в методе boot мы можем просто зарегистрировать наши миксины.

//app/Providers/AppServiceProvider.php
public function boot()
{
	Response::mixin(new ReponseMixin);
}

Классы Laravel, которые можно расширять с использованием макросов

Вы можете создать свой собственный макрос с помощью этих основных классов Laravel.

  • Request: Illuminate\Http\Request
  • Response: Illuminate\Http\Response
  • Collection: Illuminate\Support\Collection
  • Str: Illuminate\Support\Str
  • Router: Illuminate\Routing\Router
  • UrlGenerator: Illuminate\Routing\UrlGenerator
  • Cache: Illuminate\Cache\Repository
  • Filesystem: Illuminate\Filesystem\Filesystem
  • Arr: Illuminate\Support\Arr
  • Rule: Illuminate\Validation\Rule
Рейтинг
( 3 оценки, среднее 5 из 5 )
Максим Гречушников/ автор статьи
Мне 40 лет, и больше половины жизни я занимаюсь разработкой. За это время я работал с корпоративными системами, highload-проектами, интеграциями, платежными решениями, внутренними платформами и legacy-кодом, который пережил не одного разработчика. Некоторые системы, кажется, переживут и нас. Моя специализация — PHP, Laravel, backend-архитектура, DDD, тестирование, рефакторинг и техническое лидерство. Мне интересны задачи, где нужно соединить код, бизнес, данные, процессы и здравый смысл. Последние годы я много работаю с LLM и AI-инструментами: использую их для проектирования, анализа кода, документации, тестов, ревью, работы с legacy и построения инженерных процессов. Для меня LLM — это не замена разработчику, а усилитель для тех, кто умеет думать системно. В блоге я пишу о Laravel, PHP, архитектуре, тестировании, инженерной практике, управлении разработкой и реальном применении AI в работе программиста.
Понравилась статья? Поделиться с друзьями: