php 102 lines · 3 tabs

Laravel macro methods for extending framework

Carlos Mendez Jan 2026
3 tabs
<?php

namespace App\Providers;

use Illuminate\Database\Eloquent\Builder;
use Illuminate\Support\Collection;
use Illuminate\Support\ServiceProvider;
use Illuminate\Support\Str;

class AppServiceProvider extends ServiceProvider
{
    public function boot(): void
    {
        // Collection macro
        Collection::macro('toSelectArray', function () {
            return $this->mapWithKeys(function ($item) {
                return [$item->id => $item->name];
            });
        });

        // String macro
        Str::macro('partNumber', function ($value) {
            return 'PART-' . strtoupper(Str::slug($value));
        });

        // Query Builder macro
        Builder::macro('whereLike', function ($column, $value) {
            return $this->where($column, 'like', "%{$value}%");
        });

        // Request macro
        Request::macro('hasAny', function (...$keys) {
            foreach ($keys as $key) {
                if ($this->has($key)) {
                    return true;
                }
            }
            return false;
        });

        // Response macro
        Response::macro('success', function ($data = [], $message = 'Success') {
            return response()->json([
                'success' => true,
                'message' => $message,
                'data' => $data,
            ]);
        });
    }
}
3 files · php Explain with highlit

Macros dynamically add methods to Laravel's macroable classes—Request, Response, Collection, Query Builder, and more. I define macros in service providers' boot() methods. The macro() method accepts a name and closure. Macros access $this context like regular methods. Mixin provides multiple macros at once from a class. I use macros for project-specific helpers without extending classes. String, Arr, and Collection macros create domain-specific utilities. Request macros add custom validation or data extraction. This extensibility keeps framework modifications organized and upgradeable. Macros demonstrate Laravel's flexibility for customization.


Related snips

Share this code

Here's the card — post it anywhere.

Laravel macro methods for extending framework — share card
Link copied