Skip to content

Laravel Dynamic Helpers is a package that dynamically resolves helper classes and provides an Artisan command to generate custom helpers in your app/Helpers directory, making helper management effortless and fully automated.

License

Notifications You must be signed in to change notification settings

idehen-divine/laravel-dynamic-helpers

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

11 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

Laravel Dynamic Helpers

Latest Version Total Downloads License

A powerful Laravel package that provides a dynamic helper management system with an Artisan command generator. Create, organize, and access your custom helper classes effortlessly.

✨ Features

  • πŸš€ Dynamic Helper Resolution - Automatically resolves helper classes on-demand
  • 🎯 Artisan Command Generator - Create helpers with php artisan make:helper
  • πŸ“ Nested Helper Support - Organize helpers in subdirectories (e.g., Store/CreateHelper)
  • πŸ”„ Singleton Pattern - Efficient instance caching for better performance
  • 🎨 Laravel-Style Output - Beautiful command output matching Laravel's conventions
  • πŸ”Œ Auto-Discovery - Service provider automatically registered
  • πŸ’‘ Dual Access Patterns - Use moneyHelper() or helpers()->moneyHelper()

πŸ“‹ Requirements

  • PHP >= 8.1
  • Laravel >= 10.0

πŸ“¦ Installation

Install the package via Composer:

composer require l0n3ly/laravel-dynamic-helpers

The service provider will be automatically discovered by Laravel.

πŸš€ Quick Start

1. Create a Helper

php artisan make:helper MoneyHelper

This creates app/Helpers/MoneyHelper.php:

<?php

namespace App\Helpers;

use L0n3ly\LaravelDynamicHelpers\Helper;

class MoneyHelper extends Helper
{
    public function format($amount)
    {
        return number_format($amount, 2);
    }

    public function toMinor($amount)
    {
        return $amount * 100;
    }
}

2. Use Your Helper

You can access your helper in two ways:

// Direct global function (recommended)
moneyHelper()->format(1000); // "1,000.00"
moneyHelper()->toMinor(1500); // 150000

// Via helpers() function
helpers()->moneyHelper()->format(2000); // "2,000.00"

πŸ“š Usage Examples

Basic Helper

php artisan make:helper PermissionHelper
<?php

namespace App\Helpers;

use L0n3ly\LaravelDynamicHelpers\Helper;

class PermissionHelper extends Helper
{
    public function can($permission)
    {
        return auth()->user()->hasPermission($permission);
    }
}

Usage:

if (permissionHelper()->can('edit-posts')) {
    // User can edit posts
}

Nested Helpers

Create organized helper structures:

php artisan make:helper Store/CreateHelper
php artisan make:helper Store/Product/UpdateHelper

This creates:

  • app/Helpers/Store/CreateHelper.php
  • app/Helpers/Store/Product/UpdateHelper.php

Access them using flattened camelCase:

// Store/CreateHelper -> storeCreateHelper()
storeCreateHelper()->create($data);

// Store/Product/UpdateHelper -> storeProductUpdateHelper()
storeProductUpdateHelper()->update($id, $data);

In Controllers

<?php

namespace App\Http\Controllers;

use App\Http\Controllers\Controller;

class OrderController extends Controller
{
    public function store(Request $request)
    {
        $amount = moneyHelper()->toMinor($request->amount);

        if (permissionHelper()->can('create-orders')) {
            // Create order
        }
    }
}

In Blade Templates

@if(permissionHelper()->can('view-reports'))
    <div class="reports">
        {{ moneyHelper()->format($total) }}
    </div>
@endif

🎯 Advanced Features

Instance Caching

Helpers are automatically cached as singletons:

$helper1 = moneyHelper();
$helper2 = moneyHelper();

// $helper1 and $helper2 are the same instance

Callable Helpers

Helpers can be callable:

class CalculatorHelper extends Helper
{
    public function __invoke($a, $b)
    {
        return $a + $b;
    }
}

Usage:

$result = calculatorHelper(5, 10); // 15

Custom Helper Methods

Add any methods you need:

class ApiHelper extends Helper
{
    public function get($url)
    {
        return Http::get($url);
    }

    public function post($url, $data)
    {
        return Http::post($url, $data);
    }
}

πŸ“– Command Reference

Create a Helper

php artisan make:helper HelperName

Create Nested Helper

php artisan make:helper Category/ProductHelper
php artisan make:helper Admin/User/PermissionHelper

Helper Name Normalization

The command automatically normalizes names:

# All of these create "MoneyHelper"
php artisan make:helper MoneyHelper
php artisan make:helper money-helper
php artisan make:helper money_helper

πŸ§ͺ Testing

Run the test suite:

composer test

Or with PHPUnit:

vendor/bin/phpunit

πŸ“ Code Style

This package uses Laravel Pint for code style. Format code:

./vendor/bin/pint

🀝 Contributing

Contributions are welcome! Please feel free to submit a Pull Request.

πŸ“„ License

The MIT License (MIT). Please see the License File for more information.

πŸ‘€ Author

Divine Idehen

πŸ™ Acknowledgments

  • Inspired by Laravel's elegant architecture
  • Built with the Laravel community in mind

Made with ❀️ for the Laravel community

About

Laravel Dynamic Helpers is a package that dynamically resolves helper classes and provides an Artisan command to generate custom helpers in your app/Helpers directory, making helper management effortless and fully automated.

Topics

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages