Sitelet https://github.com/dereuromark/cakephp-menu/blob/master/README.md
Skip to content

Latest commit

 

History

History
98 lines (71 loc) · 3.96 KB

File metadata and controls

98 lines (71 loc) · 3.96 KB

CakePHP Menu Plugin

CI Coverage Status PHPStan Latest Stable Version Minimum PHP Version License Total Downloads Coding Standards

Composable menu builder and renderer for CakePHP applications.

This branch is for CakePHP 5.3+. See the version map for details.

Features:

  • nested menu trees with string and Cake-style array URLs
  • active-state matching with alternate routes, named routes, and fuzzy matching
  • helper-managed named menus and breadcrumb integration
  • extensible resolvers and renderers for app-specific rules

Installation

composer require dereuromark/cakephp-menu

Load the plugin:

bin/cake plugin load CakeMenu

Load the helper in your AppView:

use Cake\View\View;

class AppView extends View
{
    public function initialize(): void
    {
        parent::initialize();

        $this->loadHelper('CakeMenu.Menu');
    }
}

Quick Start

use CakeMenu\Menu;

$menu = Menu::create(['class' => 'nav']);
$menu->addItem('Dashboard', ['controller' => 'Dashboard', 'action' => 'index']);

$account = $menu->addItem('Account', '#', [
    'attributes' => ['class' => 'nav-item'],
]);
$account->getSubMenu()->setAttributes(['class' => 'submenu']);
$account->add($menu->newItem('Profile', ['controller' => 'Users', 'action' => 'profile']));
$account->add($menu->newItem('Logout', ['controller' => 'Users', 'action' => 'logout']));

echo $this->Menu->render($menu);

Documentation

Full documentation lives at https://dereuromark.github.io/cakephp-menu/.

Demo

https://sandbox.dereuromark.de/menu-sandbox

0.2 API changes

Menu callbacks accept Closure; use $service->method(...) for method references. Sort with CakeMenu\SortDirection::Asc or Desc. Authentication data accepts CakeMenu\Resolver\AuthState or its backed string; unknown strings throw.

The helper uses attributes when building a menu. Build options (attributes, overwrite, cache, rebuild) do not become render defaults. Registration closures receive the menu and helper. renderBreadcrumbs($menu, $options) uses BreadcrumbRenderer; use populateBreadcrumbs() before calling Cake's Breadcrumbs->render() yourself.

PermissionResolver calls can($identity, $permission, $item). RegexResolver takes a server request and supports dataKey and maxDepth options. MenuInterface exposes collect() and item-class accessors; setItemClass() propagates to new submenus. See the upgrade guide for migration examples.