becklyn / page-tree-bundle
This bundle provides a simple implementation of a tree built from routing configuration.
Installs: 716
Dependents: 0
Suggesters: 0
Security: 0
Stars: 3
Watchers: 4
Forks: 4
Open Issues: 0
Type:symfony-bundle
Requires
- php: >=7.2
- becklyn/menu: ^1.1.2 || ^2.0 || dev-legacy_support
- symfony/cache: ^4.3 || ^5.0
- symfony/http-foundation: ^4.3 || ^5.0
- symfony/http-kernel: ^4.3 || ^5.0
- symfony/routing: ^4.3 || ^5.0
- twig/twig: ^2.11 || ^3.0
Requires (Dev)
- roave/security-advisories: dev-master
- sensio/framework-extra-bundle: ^5.5
- symfony/phpunit-bridge: ^5.0
Suggests
- sensio/framework-extra-bundle: To automatically infer from @Security and @IsGranted annotations.
This package is auto-updated.
Last update: 2023-01-17 12:29:58 UTC
README
Adds a simple implementation for an automatic generation of a route tree to build a menu.
Installation
Install the bundle via packagist:
// ... require: { // ... "becklyn/route-tree-bundle": "^2.0" }, // ...
Load the bundle in your app/AppKernel.php
:
public function registerBundles() { $bundles = array( // ... new \Becklyn\RouteTreeBundle\BecklynRouteTreeBundle(), ); // ... }
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 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.
Hidden
All items are automatically hidden, if they have no title set (or if the security expression evaluates to false).
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 the 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"
Rendering the Route Tree
There is an automatic menu builder, that you can just use in the templates:
{{- route_tree_render("my_route", {...}) -}}
The first parameter is the parent node of which the menu should be used. The second (optional) argument are the KnpMenu render options.
Getting The Route Tree
You can inject the service Becklyn\RouteTreeBundle\Tree\RouteTree
and use it to retrieve a node:
// 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
.