- Laravel -

Exploring Laravel Macros: Extending Functionality with Ease

3 min read

Have you ever found yourself in need of adding extra functionality to Laravel's core classes? Perhaps you wanted to enhance a class with methods tailored to your application's specific requirements without modifying the core framework code. This is where Laravel Macros come into play, offering an easy way to extend Laravel's core classes and introduce additional features effortlessly.

Understanding Laravel Macros

At its core, Laravel Macros provide a convenient mechanism for extending Laravel's core classes dynamically. Rather than modifying the core framework code directly, Macros allow developers to add new methods to existing classes, enhancing their functionality without altering the framework's original codebase. This enables developers to extend classes even if they don't own them, offering a flexible solution for customizing Laravel's internal components according to specific project needs.

Getting Started with Macros

Implementing Macros in Laravel involves using a PHP trait called Macroable. Many Laravel classes, such as the Str class, already implement this trait, making them ready for extension.

To create a Laravel Macro, follow these steps:

  • Make sure the class you want to extend uses the Macroable trait.
  • We will create macro on Illuminate\Support\Str class which will convert english number to nepali number with the function name toNepaliNumber().
  • Create a new ServiceProvider or use the AppServiceProvider to add the macro, which will be within boot method of that ServiceProvider.

Creating a new ServiceProvider: php artisan make:provider MacroableServiceProvider

Register the newly created ServiceProvider in the config/app.php file.

Adding the macro within the boot method of the ServiceProvider

Now, we can use the toNepaliNumber() method from Str class anywhere in our application to convert english number to nepali number.

Now, let's add a new macro to the Str class to convert a number to a human-readable size format, like 1.2 MB or 1.5 GB.

Now, we can use the toHumanReadableSize() method from Str class anywhere in our application to convert bytes to human-readable size format.

Note : Creating many macros inside a service provider makes our code ugly and difficult to maintain. So, in the next article, I will showcase how we can refactor related macros to their own dedicated class using the mixin method provided within the Macroable trait.


In conclusion, Laravel Macros provide a powerful mechanism to extend Laravel's core classes and adding custom functionality tailored to your application's needs. By using the Macroable trait, developers can enhance existing classes with additional methods, offering flexibility and maintainability in Laravel projects.

As you dive deeper into Laravel Macros, remember to adhere to best practices and maintain clarity in your codebase. Stay tuned for our next article, where we'll explore advanced techniques for organizing and managing Macros effectively using mixins within the Macroable trait.

If you have any questions or need further clarification on Laravel Macros, don't hesitate to reach out. Happy coding!

Written By Anuz Pandey

Anuz Pandey is a multi-disciplinary designer and developer with a passion for creating visually stunning and user-friendly digital experiences. He has been working in the industry for over 5 years. He is currently working as a freelance designer and developer and is available for hire.


  • Laravel
  • Laravel Macros
  • PHP
  • Laravel Mixin