pepperfm/macros-for-laravel

A small macro registry for Laravel facades / macroable classes.
1,394
Install
composer require pepperfm/macros-for-laravel
Latest Version:1.0.2
PHP:^8.4
License:MIT
Last Updated:Sep 8, 2026
Links: GitHub  ·  Packagist
Maintainer: PepperFM

Laravel Macros

Small macro registry for Laravel facades and Macroable classes. It lets you enable macro groups via config and register everything automatically at boot.

Install

composer r pepperfm/macros-for-laravel

Laravel auto-discovers the provider: Pepperfm\LaravelMacros\Providers\LaravelMacrosServiceProvider.

Publish config

php artisan vendor:publish --tag=macros-for-laravel-config

config/macros-for-laravel.php:

return [
    'enabled' => env('MACROS_ENABLED', true),
    'profile' => env('MACROS_PROFILE', 'default'),
    'conflicts' => 'throw', // throw | overwrite
    'unreachable' => 'throw', // throw | skip
    'profiles' => [
        'default' => [
            \Pepperfm\LaravelMacros\Groups\Support\ArrCastMacros::class => true,
            \Pepperfm\LaravelMacros\Groups\Support\ArrNativeMacros::class => true,
            \Pepperfm\LaravelMacros\Groups\Cache\CacheCastMacros::class => true,
            \Pepperfm\LaravelMacros\Groups\Config\ConfigCastMacros::class => true,
            \Pepperfm\LaravelMacros\Groups\Support\CollectionMacros::class => true,
        ],
        // 'http' => [
        //     \Pepperfm\LaravelMacros\Groups\Facades\ResponseMacros::class => true,
        // ],
    ],
];

Switch profiles via env:

MACROS_PROFILE=http

You can also use the legacy top-level groups list (no profiles):

'groups' => [
    \Pepperfm\LaravelMacros\Groups\Support\ArrCastMacros::class => true,
];

Built-in macros

Arr cast helpers

Available when ArrCastMacros is enabled:

Arr::toBool($array, 'flag');
Arr::toInt($array, 'count');
Arr::toFloat($array, 'ratio');
Arr::toString($array, 'name', null, true);
Arr::toArray($array, 'items');
Arr::toEnum($array, 'status', Status::class, $default = null);

toInt() returns null for missing or non-numeric values when no default is provided. This behavior is consistent for the Arr, cache, and config variants.

All cast helpers (Arr, cache, and config) use the default for both missing keys and explicit null values, then apply their normal conversion rules. Non-null values such as false, 0, '', and [] are passed to the caster unchanged; existing invalid-value fallback rules still apply.

Trimming remains opt-in and also applies to a string default selected for null:

// Equivalent for scalar or null ID_FLOW values (including a missing key):
trim((string) ($row['ID_FLOW'] ?? ''));
Arr::toString($row, 'ID_FLOW', '', trim: true);

Arr::toString(['name' => null], 'name', '  guest  ', trim: true); // 'guest'
Arr::toBool(['enabled' => null], 'enabled', true); // true

Arr native array helpers

Available when ArrNativeMacros is enabled:

Arr::values($array);
Arr::keys($array);
Arr::keyFirst($array);
Arr::keyLast($array);
Arr::flip($array);
Arr::combine(['a', 'b'], [1, 2]);
Arr::unique(['a', 'a', 'b']);
Arr::reverse([1, 2, 3]);

Collection paginate

Available when CollectionMacros is enabled:

collect([1, 2, 3])->paginate(2);

Collection filters

Available when CollectionMacros is enabled:

collect([1, null, 2])->filterNotNull();
collect(['', ' ', 'ok', null])->filterNotBlank();

Cache typed getters

Available when CacheCastMacros is enabled:

cache()->toBool('enabled', false);
cache()->toInt('count', 0);
cache()->toFloat('ratio', 0.0);
cache()->toString('name', 'guest', true);
cache()->toArray('filters', []);
cache()->toEnum('status', Status::class, Status::Draft);

Cache::toString('name', 'guest');
cache()->store('redis')->toInt('count', 0);

cache('name', 'guest')->toString() is not supported because Laravel's cache() helper returns the raw cached value when a key is passed.

Config typed getters

Available when ConfigCastMacros is enabled:

config()->toBool('features.enabled', false);
config()->toInt('features.count', 0);
config()->toFloat('features.ratio', 0.0);
config()->toString('app.name', 'Laravel', true);
config()->toArray('features.filters', []);
config()->toEnum('features.status', Status::class, Status::Draft);

Config::toString('app.name', 'Laravel');

config('app.name', 'Laravel')->toString() is not supported because Laravel's config() helper returns the raw config value when a key is passed.

Custom groups

Create a group that implements Pepperfm\LaravelMacros\Contracts\MacroGroupContract, then add it to a profile (or to groups in legacy mode). It will be resolved via the container.

Related Packages

gabrieloliverio/laravel5-generators

Database metadata-based generators for Laravel 5

1
erirk/paypalpayment

laravel-paypalpayment is simple package help you process direct credit card paym...

0
doctrine/dbal

Powerful PHP database abstraction layer (DBAL) with many features for database s...

631,580,251 9,707
laravel/framework

The Laravel Framework.

580,311,802 34,925
laravel/tinker

Powerful REPL for the Laravel framework.

489,754,436 7,444