Route Tree Bundle
The Becklyn Route Tree Bundle adds a simple implementation for an automatic generation of a route tree to build a menu.
Installation
Install the bundle via packagist:
composer require "becklyn/route-tree-bundle"
Load the bundle in your bundles.php
Defining the Route Tree Nodes
You add elements to the tree by setting the options of the routes:
homepage:
path: /
my_route:
path: /my_route
options:
tree:
parent: homepage
title: "My Route"
Path Options
route:
# ...
options:
tree:
parent: homepage # the name of the parent node
priority: 0 # (optional) the priority of the node
title: "abc" # (optional) title of the node
parameters: {} # (optional) the default values for the parameters
security: ~ # (optional) the security expression
parent
must be set. Also all referenced parent
-routes need to exist.
Priority
All child nodes of all nodes are sorted by descending priority.
Parameters
The parameters can define default values for parameters:
page_listing:
path: /listing/{page}
options:
tree:
parameters:
page: 1
If you do not define a value, the parameter is looked up in the request attributes of the current request. If it doesn’t find anything there, 1
is used.
Security
Every node can have a custom security expression, that is evaluated when printing the tree.
All nodes where the security expression evaluates to false
are automatically hidden (including all their child nodes).
If no explicit security expression is given, the builder tries to infer the expression from the linked controller by combining @IsGranted()
and @Security()
annotations from the action method and the controller class.
If @IsGranted()
is used with the subject
attribute, nothing is infered.
Extra Parameters
You can define additional parameters, that can be used in the menu template. All path options that are not recognized (see “Path Options”) are automatically added as extra parameters.
route:
options:
tree:
parent: homepage
title: Pages
icon: pages
These extra parameters are available in the template under the extra
property:
{{ item.extra("icon") }}
Error Cases
If the page tree is invalid a InvalidRouteTreeException
is thrown on first construction of the page tree.
Short Syntax
In simple cases, the config can be simplified to:
route:
options:
tree: "parent"
# ... means the same as ...
route:
options:
tree:
parent: "parent"
Getting the Route Tree
You can inject the service Becklyn\RouteTreeBundle\Tree\RouteTree
and use it to retrieve a node:
<?php
// get a node with a specific route. With this node you can traverse the route tree.
$treeUnderMyRoute = $routeTree->getNode("my_route");
The return value is a Becklyn\RouteTreeBundle\Node\Node
.