Макросы в 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 )
Maxyc Webber/ автор статьи
Мне 35 лет. Опыт профессиональной разработки 15 лет. Занимаюсь разработкой и поддержкой корпоративных систем автоматизации бизнеса, а также высоконагруженными проектами. Мне нравится решать нестандартные проблемы бизнеса. Имею опыт формирования команд под проект, налаживания процесса разработки, коммуникации программистов и заказчиков. Есть опыт работы с зарубежными заказчиками (ОАЭ, Польша, Германия, Швейцария).
Понравилась статья? Поделиться с друзьями:
Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!:

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.