PHPackages                             sclaravel/menus - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [Utility &amp; Helpers](/categories/utility)
4. /
5. sclaravel/menus

ActiveLibrary[Utility &amp; Helpers](/categories/utility)

sclaravel/menus
===============

Laravel Menus

2.0.1(4y ago)24.5kBSD-3-ClausePHPPHP ^8.0|^8.1CI failing

Since Nov 14Pushed 4y ago1 watchersCompare

[ Source](https://github.com/sclaravel/menus)[ Packagist](https://packagist.org/packages/sclaravel/menus)[ RSS](/packages/sclaravel-menus/feed)WikiDiscussions master Synced 3w ago

READMEChangelog (3)Dependencies (3)Versions (7)Used By (0)

Laravel Menus
=============

[](#laravel-menus)

- [Installation](#installation)
- [Creating A Menu](#creating-a-menu)
    - [Menu Item](#menu-item)
    - [Menu Attributes](#menu-attributes)
    - [Menu Dropdown](#menu-dropdown)
    - [Menu Dropdown Milti Level](#menu-dropdown-multi-level)
    - [Menu Divider](#menu-divider)
    - [Dropdown Header](#dropdown-header)
    - [Ordering Menu Item](#ordering-menu-item)
    - [Make Lots of Menu](#make-lots-of-menu)
- [Menu Presenter](#menu-presenter)
    - [The Available Presenter](#available-presenter)
    - [Make A Custom Presenter](#make-a-custom-presenter)
    - [Register A New Menu Style](#register-a-menu-style)
- [View Presenter](#view-presenter)
    - [The Available View Presenter](#available-view-presenter)
- [Rendering Menu](#rendering-menu)
- [Menu Inheritance](#menu-inheritance)
    - [Menu Instance](#menu-instance)
    - [Finding Menu Item](#finding-menu-item)
    - [Modifying Menu](#modifying-menu)
- [Set sub-active](#subactive-menu)

Installation
------------

[](#installation)

You can install the through composer command line.

```
composer require sclaravel/menus

```

Publish package's assets by running:

```
php artisan vendor:publish

```

Creating A Menu
---------------

[](#creating-a-menu)

You can define your menus in `app/Menus/Left.php` file. That file will loaded automatically by this package.

To create a menu, simply call the `create` or `make` method from `Menu` facade. The first parameter is the menu name and the second parameter is callback for defining menu items.

```
Menu::create('navbar', function($menu) {
	// define your menu items here
});
```

```
Menu::make('navbar', function($menu) {
	// define your menu items here
});

```

**Menu Item**

As explained before, we can defining menu item in the callback by accessing `$menu` variable, which the variable is instance of `TysonLaravel\Menus\Builder` class.

To defining a plain URL, you can use `->url()` method.

```
Menu::create('navbar', function($menu) {
            // URL , Title,  Attributes
  $menu->url('home', 'Home', ['target' => 'blank']);
});
```

If you have named route, you define the menu item by calling `->route()` method.

```
Menu::create('navbar', function($menu) {
	$menu->route(
		'users.show', // route name
		'View Profile', // title
		['id' => 1], // route parameters
		['target' => 'blank'] // attributes
	);
});
```

You can also defining the menu item via array by calling `->add()` method.

```
Menu::create('navbar', function($menu) {
	$menu->add([
		'url' => 'about',
		'title' => 'About',
		'attributes' => [
			'target' => '_blank'
		]
	]);

	$menu->add([
		'route' => ['profile', ['user' => 'gravitano']],
		'title' => 'Visit My Profile',
		'attributes' => [
			'target' => '_blank'
		]
	]);
});
```

**Menu Attibutes**

AttibutesDetail`target``icon`**Menu Dropdown**

To create a dropdown menu, you can call to `->dropdown()` method and passing the first parameter by title of dropdown and the second parameter by closure callback that retrive `$sub` variable. The `$sub` variable is the the instance of `TysonLaravel\Menus\MenuItem` class.

```
Menu::create('navbar', function($menu) {
	$menu->url('/', 'Home');
	$menu->dropdown('Settings', function ($sub) {
		$sub->url('settings/account', 'Account');
		$sub->url('settings/password', 'Password');
		$sub->url('settings/design', 'Design');
	});
});

```

**Menu Dropdown Multi Level**

You can also create a dropdown inside dropdown by using `->dropdown()` method. This will allow to to create a multilevel menu items.

```
Menu::create('navbar', function($menu)
{
	$menu->url('/', 'Home');
	$menu->dropdown('Account', function ($sub) {
		$sub->url('profile', 'Visit My Profile');
		$sub->dropdown('Settings', function ($sub) {
			$sub->url('settings/account', 'Account');
			$sub->url('settings/password', 'Password');
			$sub->url('settings/design', 'Design');
		});
		$sub->url('logout', 'Logout');
	});
});

```

**Menu Divider**

You may also define a divider for each menu item. You can divide between menu item by using `->divider()` method.

```
Menu::create('navbar', function($menu) {
	$menu->url('/', 'Home');
	$menu->divider();
	$menu->url('profile', 'Profile')
});

```

**Dropdown Header**

You may also add a dropdown header for the specified menu item by using `->header()` method.

```
Menu::create('navbar', function($menu) {
	$menu->url('/', 'Home')
	$menu->dropdown('Settings', function ($sub) {
		$sub->header('ACCOUNT');
		$sub->url('/settings/design', 'Design');
		$sub->divider();
		$sub->url('logout', 'Logout');
	});
});

```

**Ordering Menu Item**

You may order the menu by specify `order` parameter.

```
Menu::create('navbar', function($menu) {
	// url, title, order, attributes
	$menu->url('/', 'Home', 1);
	// url, title, route parameters, order, attributes
	$menu->route('/', 'About', ['user' => '1'], 2);
	// title, order, callback attributes
	$menu->dropdown('Settings', function ($sub) {
		$sub->header('ACCOUNT');
		$sub->url('/settings/design', 'Design');
		$sub->divider();
		$sub->url('logout', 'Logout');
	}, 3);
});

```

You may also set the order value by calling `->order` method.

```
Menu::create('navbar', function($menu) {
	$menu->url('/', 'Home', ['icon' => 'fa fa-dashboard'])->order(1);

	$menu->route('/', 'About', ['user' => '1'], ['icon' => 'fa fa-user'])->order(2);

	$menu->dropdown('Settings', function ($sub) {
		$sub->header('ACCOUNT');
		$sub->url('/settings/design', 'Design');
		$sub->divider();
		$sub->url('logout', 'Logout');
	})->order(3);
});

```

By default ordering feature is disabled. You can enable the `ordering` feature in your config file. Just update value of `ordering` config to `true` and now your menu will ordered by `order` key.

```
// File: config/menus.php
return [
	'ordering' => true
];

```

You may also enable or disable menu ordering for each menu via `->enableOrdering` and `->disableOrdering` method.

```
Menu::create('navbar', function($menu) {
	// disable menu ordering
	$menu->enableOrdering();

	// disable menu ordering
	$menu->disableOrdering();
});

```

**Make Lots of menu**

You can also create a lots of menu with different name and menu items.

```
Menu::create('menu1', function($menu) {

	$menu->route('home', 'Home');

	$menu->url('profile', 'Profile');
});

Menu::create('menu2', function($menu) {
	$menu->route('home', 'Home');

	$menu->url('profile', 'Profile');
});
```

### Menu Presenter

[](#menu-presenter)

This package included with some presenter classes that used for converting menu to html tag. By default the generated menu style is `bootstrap navbar`. But, there are also several different menu styles.

You can apply the menu style via `->style()` method.

```
Menu::create('navbar', function($menu) {
	$menu->style('nav-pills');
});

```

Or you can set which presenter to present the menu style via `->setPresenter()` method.

```
Menu::create('navbar', function($menu) {
	$menu->setPresenter('TysonLaravel\Menus\Presenters\Bootstrap\NavTabPresenter');
});
```

You can also set which style of presenter when you rendering a menu.

```
Menu::render('navbar', 'navbar-right');

Menu::render('navbar', 'TysonLaravel\Menus\Presenters\Bootstrap\NavPillsPresenter');
```

**The List of Available Menu Presenter Class**

NamePresenter Class`navbar``TysonLaravel\Menus\Presenters\Bootstrap\NavbarPresenter``navbar-right``TysonLaravel\Menus\Presenters\Bootstrap\NavbarRightPresenter``nav-pills``TysonLaravel\Menus\Presenters\Bootstrap\NavPillsPresenter``nav-tab``TysonLaravel\Menus\Presenters\Bootstrap\NavTabPresenter``sidebar``TysonLaravel\Menus\Presenters\Bootstrap\SidebarMenuPresenter``navmenu``TysonLaravel\Menus\Presenters\Bootstrap\NavMenuPresenter`**Make A Costum Presenter**

You can create your own presenter class. Make sure your presenter is extends to `TysonLaravel\Menus\Presenters\Presenter` and `implements` to 'TysonLaravel\\Menus\\Presenters\\PresenterInterface'.

For example, this is `zurb-top-bar` presenter.

```
use TysonLaravel\Menus\Presenters\Presenter;

class ZurbTopBarPresenter extends Presenter {
	/**
	 * {@inheritdoc }
	 */
	public function getOpenTagWrapper()
	{
		return  PHP_EOL . '' . PHP_EOL;
	}

	/**
	 * {@inheritdoc }
	 */
	public function getCloseTagWrapper()
	{
		return  PHP_EOL . '' . PHP_EOL;
	}

	/**
	 * {@inheritdoc }
	 */
	public function getMenuWithoutDropdownWrapper($item)
	{
		return ''.$item->getIcon().' '.$item->title.'';
	}

	/**
	 * {@inheritdoc }
	 */
	public function getActiveState($item)
	{
		return \Request::is($item->getRequest()) ? ' class="active"' : null;
	}

	/**
	 * {@inheritdoc }
	 */
	public function getDividerWrapper()
	{
		return '';
	}

	/**
	 * {@inheritdoc }
	 */
	public function getMenuWithDropDownWrapper($item)
	{
		return '

		         '.$item->getIcon().' '.$item->title.'

		          '.$this->getChildMenuItems($item).'

		      ' . PHP_EOL;
		;
	}
}
```

To use this costum presenter, you can use the `setPresenter` method.

```
Menu::create('zurb-top-bar', function($menu) {
	$menu->setPresenter('ZurbTopBarPresenter');
});
```

**Register A New Menu Style**

Menu style is like an alias to a presenter. You can register your style from your costum presenter in the configuration file in `config/menus.php`.

```
return array(
	'navbar'		=>	'TysonLaravel\Menus\Presenters\Bootstrap\NavbarPresenter',
	'navbar-right'	=>	'TysonLaravel\Menus\Presenters\Bootstrap\NavbarRightPresenter',
	'nav-pills'		=>	'TysonLaravel\Menus\Presenters\Bootstrap\NavPillsPresenter',
	'nav-tab'		=>	'TysonLaravel\Menus\Presenters\Bootstrap\NavTabPresenter',

	'zurb-top-bar'	=>	'ZurbTopBarPresenter',
);
```

Now, you can use a style like this.

```
Menu::create('zurb-top-bar', function($menu) {
	$menu->style('zurb-top-bar');
});
```

### View Presenter

[](#view-presenter)

If you don't like to use presenter class, you use view presenter instead. We can set which view to present the menus by calling `->setView()` method.

```
Menu::create('navbar', function($menu) {
	$menu->setView('menus::default');
});

```

**The List of Available View Presenter**

View NameMenu Style`menus::default`Bootstrap Navbar (default)`menus::navbar-left`Bootstrap Navbar Left`menus::navbar-right`Bootstrap Navbar Right`menus::nav-tabs`Bootstrap Nav Tabs`menus::nav-tabs-justified`Bootstrap Nav Tabs Justified`menus::nav-pills`Bootstrap Nav Pills`menus::nav-pills-stacked`Bootstrap Nav Pills Stacked`menus::nav-pills-justified`Bootstrap Nav Pills Justified`menus::menu`Plain Menu

### Rendering Menu

[](#rendering-menu)

To render the menu you can use `render` or `get` method.

```
Menu::render('navbar');

Menu::get('navbar');
```

You can also set which style to present the menu in the second parameter.

```
Menu::render('navbar', 'navbar-right');

```

Or you may also set which view to present the menu.

```
Menu::render('navbar', 'menus::nav-tabs');

```

### The Menu Instance

[](#the-menu-instance)

Sometimes, maybe we need to add a new additional menu from controller or other place. To get an instance of an existing menu, you can use the `instance` method.

```
$menu = Menu::instance('zurb-top-bar');

// You can also make additions to the menu again

$menu->add(['title' => 'Settings', 'route' => 'settings']);

$menu->url('profile', 'Profile');

$menu->route('settings', 'Settings');
```

### Finding Menu Item

[](#finding-menu-item)

To find menu item, you can use `findBy` method from `TysonLaravel\Menus\MenuBuilder` class.

```
$menu = Menu::instance('sidebar');

$menu->url('profile', 'Profile');

$menuItem = $menu->findBy('title', 'Profile');

// add child menu
$menuItem->url('foo', 'Foo');

```

You may also use `whereTitle` helper method to find a specific menu item. Also, you can add other child menu item in the callback that located in the second argument in `whereTitle` method.

```
$menu = Menu::instance('sidebar');

$menu->url('profile', 'Profile');

$menu->whereTitle('Profile', function ($sub) {
	$sub->url('foo', 'Foo');
});

// add childs menu

```

### Modifying Menu

[](#modifying-menu)

After we create a menu, maybe we need to add other additional menus. You may modifying menu via `->modify` method.

```
Menu::modify('navbar', function($menu) {
	$menu->add([
		'title' => 'Foo',
		'url' => 'bar',
	]);
});

```

### Set active in sub menu

[](#set-active-in-sub-menu)

Use `->subActive(['routeName'])`

```
Menu::create('navbar', function($menu) {
  $menu->dropdown('Settings', function ($sub) {
    $sub->url('user-management', 'User management')->subActive(['edit-user', 'create-user']);
  });
});

```

###  Health Score

36

—

LowBetter than 79% of packages

Maintenance20

Infrequent updates — may be unmaintained

Popularity22

Limited adoption so far

Community9

Small or concentrated contributor base

Maturity76

Established project with proven stability

 Bus Factor1

Top contributor holds 88.2% of commits — single point of failure

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

###  Release Activity

Cadence

Every ~409 days

Recently: every ~453 days

Total

6

Last Release

1462d ago

Major Versions

1.4.3 → 2.02022-06-22

PHP version history (4 changes)1.0PHP &gt;=5.5.9

1.4.2PHP &gt;=7.2

1.4.3PHP &gt;=7.0

2.0PHP ^8.0|^8.1

### Community

Maintainers

![](https://www.gravatar.com/avatar/da33ce3ad3b455d147b7a0b6450ac011d08fa4c404a2b328d446995cd4e83d3b?d=identicon)[Vagabondtq](/maintainers/Vagabondtq)

---

Top Contributors

[![truongthaison](https://avatars.githubusercontent.com/u/7956129?v=4)](https://github.com/truongthaison "truongthaison (15 commits)")[![thaisontruong](https://avatars.githubusercontent.com/u/103273903?v=4)](https://github.com/thaisontruong "thaisontruong (2 commits)")

---

Tags

laravelmenunavigationnav

###  Code Quality

TestsPHPUnit

### Embed Badge

![Health badge](/badges/sclaravel-menus/health.svg)

```
[![Health](https://phpackages.com/badges/sclaravel-menus/health.svg)](https://phpackages.com/packages/sclaravel-menus)
```

###  Alternatives

[caffeinated/menus

Laravel Menus

132160.3k5](/packages/caffeinated-menus)[markwalet/nova-modal-response

A Laravel Nova asset for Modal responses on an action.

17818.7k](/packages/markwalet-nova-modal-response)[awes-io/navigator

🧿 Build navigation or menu for Laravel and Awes.io. Unlimit complexity and depth of the menu.

4922.8k](/packages/awes-io-navigator)[nedwors/navigator

A Laravel package to ease defining navigation menus

433.4k](/packages/nedwors-navigator)[rinvex/laravel-menus

Rinvex Menus is a simple menu builder package for Laravel, that supports hierarchical structure, ordering, and styling with full flexibility using presenters for easy styling and custom structure of menu rendering.

304.0k20](/packages/rinvex-laravel-menus)[tomshaw/electricgrid

A feature-rich Livewire package designed for projects that require dynamic, interactive data tables.

119.2k](/packages/tomshaw-electricgrid)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
