##Links
Spatie\Menu\Link
Links are created with the to
factory method, which requires a url and a string of text (or html) as parameters. There's also a convenience method on the Menu
class.
Menu::new()->add(Link::to('/', 'Home'));
Menu::new()->link('/', 'Home');
<ul>
<li><a href="/">Home</a></li>
</ul>
When using convenience methods to add items, you can't simultanuously add classes or attributes to the item since there isn't an instance variable.
Links also have a prefix
method, or they can be prefixed in bulk per menu.
Link::to('foo', 'Foo')->prefix('/items');
<a href="/users/sebastian">Sebastian</a>
Menu::new()
->prefixLinks('/items')
->link('foo', 'Foo')
->link('bar', 'Bar');
<ul>
<li><a href="/items/foo">Foo</a></li>
<li><a href="/items/bar">Bar</a></li>
</ul>
##Raw Html
Spatie\Menu\Html
Raw html chunks can be added as menu items via the Html
class or convenience method.
Menu::new()->add(Html::raw('<span>Hi!</span>'));
Menu::new()->html('<span>Hi!</span>');
<ul>
<li><span>Hi!</span></li>
</ul>
Spatie\Menu\Menu
Since the Menu
class itself implements the Item
interface, menus can be nested. All you need to do is pass a new Menu
instance to the add
function:
Menu::new()
->link('/', 'Menu')
->add(Menu::new()
->link('/basic-usage/your-first-menu', 'Your First Menu')
->link('/basic-usage/adding-submenus', 'Adding Submenus')
);
<ul>
<li>
<a href="/">Menu</a>
</li>
<li>
<ul>
<li>
<a href="/basic-usage/your-first-menu">
Your First Menu
</a>
</li>
<li>
<a href="/basic-usage/adding-submenus">
Adding Submenus
</a>
</li>
</ul>
</li>
</ul>
You can also use submenus to divide your menu in sections. A header is optional, and can be a plain string or an instance of item
. The menu parameter can be an instance of Menu
or a callable which will pass through a new Menu
as it's first parameter.
Menu::new()
->submenu(Menu::new()
->link('/introduction', 'Introduction')
->link('/requirements', 'Requirements')
->link('/installation-setup', 'Installation and Setup')
})
->submenu('<h2>Basic Usage</h2>', function (Menu $menu) {
$menu
->prefixLinks('/basic-usage')
->link('/your-first-menu', 'Your First Menu')
->link('/working-with-items', 'Working With Items')
->link('/adding-sub-menus', 'Adding Sub Menus');
});
<ul>
<li>
<ul>
<li><a href="/introduction">Introduction</a></li>
<li><a href="/requirements">Requirements</a></li>
<li><a href="/installation-setup">Installation and Setup</a></li>
</ul>
</li>
<li>
<h2>Basic Usage</h2>
<ul>
<li><a href="/basic-usage/your-first-menu">Your First Menu</a></li>
<li><a href="/basic-usage/working-with-items">Working With Items</a></li>
<li><a href="/basic-usage/adding-sub-menus">Adding Sub Menus</a></li>
</ul>
</li>
</ul>
If you're using a callable, the new instance will be a blueprint—an empty copy—of the current menu. This means that filters applied to your main menu will also be applied to your submenu. This is useful for cascading prefixLinks
.
Menu::new()
->prefixLinks('/foo')
->submenu(function (Menu $menu) {
$menu
->prefixLinks('/bar')
->add('/baz', 'Baz');
});
<ul>
<li>
<ul>
<li><a href="/foo/bar/baz">Baz</a></li>
</ul>
</li>
</ul>