zemd/symfony-menu

This package is abandoned and no longer maintained. No replacement package was suggested.

Breadcrumbs builder

1.0.0 2016-11-21 16:00 UTC

This package is not auto-updated.

Last update: 2023-02-04 17:48:47 UTC


README

Very lightweight but powerful breadcrumbs builder for symfony

Installation

composer require zemd/symfony-menu

Usage

This component build breadcrumb path leveraging standard symfony router. If you want to skip or modify some part of the path feel free to use @Breadcrumbs annotation.

For instance we have next controller:

class MyController {
  
  /**
   * This route should be skipped from menu chain
   * 
   * @Breadcrumbs(skip=true)
   */
  public function myActionIwantToSkip() {}
  
  /**
   * This route should be in the root of menu tree 
   *
   * @Route("/dashboard", name="dashboard")
   * @Breadcrumbs(root=true)
   */
  public function dashboardAction() {}
  
  /**
   * This route should be added automatically into menu chain 
   *
   * @Route("/dashboard/graphs")
   */
  public function viewMoreGraphsAction() {}
}

Let's now share breadcrumbs into the view by using twig globals as example:

class BreadcrumbsGlobalExtension extends \Twig_Extension implements Twig_Extension_GlobalsInterface
{
    const NAME = 'zemd_breadcrumbs_extension';

    /** @var BreadCrumbsManager */
    protected $breadcrumbsManager;

    public function __construct(BreadCrumbsManager $breadcrumbsManager) {
        $this->breadcrumbsManager = $breadcrumbsManager;
    }

    /**
     * Returns the name of the extension.
     *
     * @return string The extension name
     */
    public function getName() {
        return self::NAME;
    }

    public function getGlobals() {
        return [
            'zemd_breadcrumbs' => $this->breadcrumbsManager->getBreadcrumbs()
        ];
    }
}
services:
  zemd.breadcrumbs_manager:
    class: Zemd\Component\Menu\BreadCrumbsManager
    arguments: ["@router", "@annotation_reader", "@request_stack"]
    calls:
      - [setContainer, ["@service_container"]]
      
  zemd.breadcrumbs.twig_extension:
    class: Path\To\Your\BreadcrumbsGlobalExtension
    public: false
    arguments: ["@zemd.breadcrumbs_manager"]
    tags:
      - { name: twig.extension }
      
  zemd.router_checker.twig_extension:
    class: Zemd\Component\Menu\Twig\Extension\RouteChecker
    public: false
    arguments: ["@request_stack", "@zemd.breadcrumbs_manager"]
    tags:
      - { name: twig.extension }

Now we can show our menu in the header and style or translate menu items as we want:

<nav id="Nav-bread" class="navbar navbar-breadcrumbs clearfix" role="navigation">
  {% for node in zemd_breadcrumbs %}
      <div class="navbar__item{% if (is_route_active(node.routeName)) %} active{% endif %}">
          <a href="{{ path(node.routeName, node.pathParams) }}">
              <span>{{ node.routeName|trans({}, "breadcrumbs") }}</span>
          </a>
      </div>
  {% endfor %}
</nav>

Advanced usage

// TODO: Example for generator

License

Symfony Menu is released under the MIT license.

Donate