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
Requires
- php: >=5.6
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.