Laravel 10 – 13
PHP 8.2+
A long-lived project that still receives updates
A Nova resource tool to manage menus in your application.
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
2025
2026
 Dependencies

Development

^8.0.0 | ^9.12 | ^10.1 | ^11.0
^2.28 | ^3.7 | ^4.0
^2.0 | ^3.0 | ^4.0

Runtime

laravel/nova
^5.0
^10.0 | ^11.0 | ^12.0 | ^13.0
 Project Readme

Nova menu manager

Travis Packagist Release Licence

A Nova tool to manage menus.

Requirements

  • PHP >= 8.2
  • Laravel Nova >= 4.0
  • Laravel Framework >= 10.0

NOTE: These instructions are for Laravel >= 9.0 and Laravel Nova 4.0. If you are using prior version, please see the previous version's docs.

Installation

composer require novius/laravel-nova-menu

Then, launch migrations

php artisan migrate

Configuration

Some options that you can override are available.

php artisan vendor:publish --provider="Novius\LaravelNovaMenu\LaravelNovaMenuServiceProvider" --tag="config"

Edit default templates

Run:

php artisan vendor:publish --provider="Novius\LaravelNovaMenu\LaravelNovaMenuServiceProvider" --tag="views"

Usage

Blade directive

You can display menu with :

<x-laravel-nova-menu::menu menu="slug-of-menu" />

You can also display menu by passing the model instance :

<x-laravel-nova-menu::menu :menu="Menu::find(1)" />

By default a fallback to app()->getLocale() is activated.

If you want force a specific slug with no fallback you can call :

<x-laravel-nova-menu::menu menu="slug-of-menu" :localeFallback="false" />

If you want to use a specific view you can call :

<x-laravel-nova-menu::menu menu="slug-of-menu" view="partial/menu" />

Override views

You can override views with :

php artisan vendor:publish --provider="Novius\LaravelNovaMenu\LaravelNovaMenuServiceProvider" --tag="views"

Manage internal link possibilities

Laravel Nova Menu uses Laravel Linkable to manage linkable routes and models. Please read the documentation.

Customize tree passed to the view

<?php

namespace App\Providers;

use Novius\LaravelNovaMenu\LaravelNovaMenuService;

class AppServiceProvider extends ServiceProvider
{
     // ...
     
    public function boot()
    {
        /**
         * @var LaravelNovaMenuService $menu
         */
        $menu = $this->app->get('laravel-nova-menu');
        $menu->setTreeUsing(function(Menu $menu, array $tree) {
            // ... your actions on tree
            return $tree;
        });
    }
}

Customize tree building

<?php

namespace App\Providers;

use Novius\LaravelNovaMenu\LaravelNovaMenuService;

class AppServiceProvider extends ServiceProvider
{
     // ...
     
    public function boot()
    {
        /**
         * @var LaravelNovaMenuService $menu
         */
        $menu = $this->app->get('laravel-nova-menu');
        $menu->setBuildTreeUsing(function(Collection $items) {
            // ... your actions to build tree as an array
            return $tree;
        });
    }
}

Lint

Run php-cs with:

composer run-script lint

Contributing

Contributions are welcome! Leave an issue on Github, or create a Pull Request.

Licence

This package is under GNU Affero General Public License v3 or (at your option) any later version.