2017 © Pedro Peláez
 

symfony-bundle pd-menu

Symfony Simple Menu Bundle

image

rmznpydn/pd-menu

Symfony Simple Menu Bundle

  • Sunday, July 8, 2018
  • by rmznpydn
  • Repository
  • 1 Watchers
  • 6 Stars
  • 56 Installations
  • PHP
  • 1 Dependents
  • 0 Suggesters
  • 1 Forks
  • 0 Open issues
  • 6 Versions
  • 409 % Grown

The README.md

pdMenu Bundle

Simple fast object-oriented menu maker for Symfony 5, (*1)

Packagist Github Release license PHP from Packagist, (*2)

Installation

Step 1: Download the Bundle

Open a command console, enter your project directory and execute the following command to download the latest stable version of this bundle:, (*3)

composer require appaydin/pd-menu

This command requires you to have Composer installed globally, as explained in the installation chapter of the Composer documentation., (*4)

Step 2: Enable the Bundle

With Symfony 4, the package will be activated automatically. But if something goes wrong, you can install it manually., (*5)

Then, enable the bundle by adding it to the list of registered bundles in the config/bundles.php file of your project:, (*6)

<?php
// config/bundles.php

return [
    //...
    Pd\MenuBundle\PdMenuBundle::class => ['all' => true]
];

Create Your First menu

Step 1: Without Service

You can create menus without service. You can load the necessary parameters using $options, (*7)

<?php
// src/Menu/FirstMenu.php

namespace App\Menu;

use Pd\MenuBundle\Builder\ItemInterface;
use Pd\MenuBundle\Builder\Menu;

class FirstMenu extends Menu
{
    /**
     * Override
     */
    public function createMenu(array $options = []): ItemInterface
    {
        // Create Root Item
        $menu = $this
            ->createRoot('settings_menu', true) // Create event is "settings_menu.event"
            ->setChildAttr(['data-parent' => 'admin_account_list']); // Add Parent Menu to Html Tag

        // Create Menu Items
        $menu->addChild('nav_config_general', 1)
            ->setLabel('nav_config_general')
            ->setRoute('admin_settings_general')
            ->setLinkAttr(['class' => 'nav-item'])
            ->setRoles(['ADMIN_SETTINGS_GENERAL'])
                // Contact
                ->addChildParent('nav_config_contact', 5)
                ->setLabel('nav_config_contact')
                ->setRoute('admin_settings_contact')
                ->setLinkAttr(['class' => 'nav-item'])
                ->setRoles(['ADMIN_SETTINGS_CONTACT'])
                // Email
                ->addChildParent('nav_config_email', 10)
                ->setLabel('nav_config_email')
                ->setRoute('admin_settings_email')
                ->setLinkAttr(['class' => 'nav-item'])
                ->setRoles(['ADMIN_SETTINGS_EMAIL'])
                // Template
                ->addChildParent('nav_config_template')
                ->setLabel('nav_config_template')
                ->setRoute('admin_settings_template')
                ->setLinkAttr(['class' => 'nav-item'])
                ->setRoles(['ADMIN_SETTINGS_TEMPLATE'])
                // Account
                ->addChildParent('nav_config_user')
                ->setLabel('nav_config_user')
                ->setRoute('admin_settings_user')
                ->setLinkAttr(['class' => 'nav-item'])
                ->setRoles(['ADMIN_SETTINGS_USER']);

        return $menu;
    }
}

Rendering Menu

The creation process is very simple. You can specify additional options., (*8)

{{ pd_menu_render('App\\Menu\\FirstMenu', {
    'custom': 'variable or options'
}) }}

You can change the default options., (*9)

{{ pd_menu_render('App\\Menu\\FirstMenu', {
    'template': '@PdMenu/Default/menu.html.twig',
    'depth': null,
    'currentClass': 'active',
    'trans_domain': 'admin',
    'iconTemplate' => '<i class="material-icons">itext</i>'
}) }}

You can change the default options globally., (*10)

config/packages/pd_menu.yaml

pd_menu:
    template: '@PdMenu/Default/menu.html.twig',
    depth: null,
    currentClass: active
    trans_domain: admin,
    iconTemplate: '<i class="fa&text"></i>'

Create Menu Event & Event Listener

Step 1: Create Menu Event

All menus automatic events are generated. Example : "menu_name.event", (*11)

Step 2: Create Menu Listener

Now let's create a listener for the event., (*12)

<?php
// src/Listener/MenuListener.php

namespace App\Listener;

use Pd\MenuBundle\Event\PdMenuEvent;

class MenuListener
{
    public function onCreate(PdMenuEvent $event)
    {
        // Get Menu Items
        $menu = $event->getMenu();

        // Add New Item
        $menu->addChild('demo_item', 5)
            ->setLabel('Home Page')
            ->setRoute('home_route');
    }
}

Let's create a service for the listener., (*13)

App\Menu\MenuListener:
    tags:
        - { name: kernel.event_listener, event: settings_menu.event, method: onCreate }

The Versions

08/07 2018

dev-master

9999999-dev https://github.com/rmznpydn/pd-menu

Symfony Simple Menu Bundle

  Sources   Download

MIT

The Requires

 

menu pdadmin pdmenu symfony-menu

08/07 2018

1.0.04

1.0.04.0 https://github.com/rmznpydn/pd-menu

Symfony Simple Menu Bundle

  Sources   Download

MIT

The Requires

 

menu pdadmin pdmenu symfony-menu

08/06 2018

1.0.03

1.0.03.0 https://github.com/rmznpydn/pd-menu

Symfony Simple Menu Bundle

  Sources   Download

MIT

The Requires

 

menu pdadmin pdmenu symfony-menu

29/01 2018

1.0.02

1.0.02.0 https://github.com/rmznpydn/pd-menu

Symfony Simple Menu Bundle

  Sources   Download

MIT

The Requires

 

menu pdadmin pdmenu symfony-menu

29/01 2018

1.0.01

1.0.01.0 https://github.com/rmznpydn/pd-menu

Symfony Simple Menu Bundle

  Sources   Download

MIT

The Requires

 

menu pdadmin pdmenu symfony-menu

28/01 2018

1.0.0

1.0.0.0 https://github.com/rmznpydn/pd-menu

Symfony Simple Menu Bundle

  Sources   Download

MIT

The Requires

 

menu pdadmin pdmenu symfony-menu