Using Macros | menu | Spatie

 SPATIE

  HTML Menu Generator
======================

spatie.be/open-source

  [Docs](https://spatie.be/docs)  [Menu](https://spatie.be/docs/menu/v2)  Menus-in-your-laravel-app  Using Macros

 Version   v3   v2   v1

 Other versions for crawler [v3](https://spatie.be/docs/menu/v3) [v2](https://spatie.be/docs/menu/v2) [v1](https://spatie.be/docs/menu/v1)

- [ Introduction ](https://spatie.be/docs/menu/v2/introduction)
- [ Postcardware ](https://spatie.be/docs/menu/v2/postcardware)
- [ Requirements ](https://spatie.be/docs/menu/v2/requirements)
- [ Installation and Setup ](https://spatie.be/docs/menu/v2/installation-and-setup)
- [ Questions &amp; Issues ](https://spatie.be/docs/menu/v2/questions-and-issues)
- [ Changelog ](https://spatie.be/docs/menu/v2/changelog)
- [ About Us ](https://spatie.be/docs/menu/v2/about-us)

Basic usage
-----------

- [ Your First Menu ](https://spatie.be/docs/menu/v2/basic-usage/your-first-menu)
- [ Adding Items ](https://spatie.be/docs/menu/v2/basic-usage/adding-items)
- [ Building a menu from a data source ](https://spatie.be/docs/menu/v2/basic-usage/building-a-menu-from-a-data-source)

Items in depth
--------------

- [ Active Items ](https://spatie.be/docs/menu/v2/items-in-depth/active-items)
- [ Manipulating Items ](https://spatie.be/docs/menu/v2/items-in-depth/manipulating-items)
- [ Conditionally Adding Items ](https://spatie.be/docs/menu/v2/items-in-depth/conditionally-adding-items)

Controlling the html output
---------------------------

- [ Item Attributes ](https://spatie.be/docs/menu/v2/controlling-the-html-output/item-attributes)
- [ Parent Attributes ](https://spatie.be/docs/menu/v2/controlling-the-html-output/parent-attributes)
- [ Appending and Prepending Html ](https://spatie.be/docs/menu/v2/controlling-the-html-output/appending-and-prepending-html)
- [ Non-list Menus ](https://spatie.be/docs/menu/v2/controlling-the-html-output/non-list-menus)

Menus in your Laravel app
-------------------------

- [ Convenience Methods ](https://spatie.be/docs/menu/v2/menus-in-your-laravel-app/convenience-methods)
- [ Views as Menu Items ](https://spatie.be/docs/menu/v2/menus-in-your-laravel-app/views-as-menu-items)
- [ Conditional Items Based on Permissions ](https://spatie.be/docs/menu/v2/menus-in-your-laravel-app/conditional-items-based-on-permissions)
- [ Using Macros ](https://spatie.be/docs/menu/v2/menus-in-your-laravel-app/using-macros)

Examples
--------

- [ Bootstrap Menu ](https://spatie.be/docs/menu/v2/examples/bootstrap-menu)

      You are viewing the documentation for **an older version** of this package. You can check the version you are using with the following command:

 `                                    composer show spatie/menu                                                                                                                                                                                                                                    `

Using Macros
============

###  On this page

1. [ Example: Convenience Methods for Links ](#content-example-convenience-methods-for-links)
2. [ Example: Html Macros ](#content-example-html-macros)
3. [ Example: Registering Menu's for Quick Access ](#content-example-registering-menus-for-quick-access)

All classes in the laravel-menu package use the `Macroable` trait for quick &amp; easy extensions.

Example: Convenience Methods for Links
------------------------------------------------------------------------------------------------------------------------------------------------------------------------

`Spatie\Menu\Laravel\Link`

```
Link::macro('product', function (Product $product) {
    return Link::action('ProductController@show', $product->name, [$product->id]);
});

echo Link::product(Product::findOrFail(1));
```

```
Product #1
```

Example: Html Macros
------------------------------------------------------------------------------------------------------------------

`Spatie\Menu\Laravel\Html`

```
Html::macro('avatar', function (User $user) {
    return Html::raw(sprintf(
        '',
        $user->gravatar_link,
        $user->name
    ));
});

echo Html::avatar(User::findOrFail(1));
```

```

```

Example: Registering Menu's for Quick Access
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

`Spatie\Menu\Laravel\Menu`

```
Menu::macro('main', function() {
    return Menu::new()
        ->route('home', 'Home')
        ->route('about', 'Home')
        ->route('contact', 'Home');
});
```

If you've registered the facade, You can call the macro without namespace imports in your blade view:

```

    {!! Menu::main() !!}

```
