Ce bundle fournit un moyen de créer du camion "dynamique" dans vos applications Symfony.
Le compositeur est la seule méthode d'installation prise en charge. Exécutez ce qui suit pour installer la dernière version de Packagist:
composer require slope-it/breadcrumb-bundle
Ou, si vous préférez, vous pouvez avoir besoin d'une version dans votre composer.json
:
{
"require" : {
"slope-it/breadcrumb-bundle" : " * "
}
}
Une fois installé, chargez le bundle dans votre classe de noyau:
// ...
class AppKernel extends Kernel
{
public function registerBundles ()
{
$ bundles = [
// ...
new SlopeIt BreadcrumbBundle SlopeItBreadcrumbBundle (),
];
// ...
}
// ...
}
Il existe deux façons de créer une chapelure: via le code (1) ou via les attributs (2).
Via le code : vous pouvez injecter le constructeur de chapelure dans votre contrôleur et ajouter des articles de chapelure:
<?php
use SlopeIt BreadcrumbBundle Service BreadcrumbBuilder ;
class CoolController extends Controller
{
public function coolStuffAction ( BreadcrumbBuilder $ builder )
{
$ builder -> addItem ( ' home ' , ' home_route ' );
$ builder -> addItem ( ' $entity.property ' , ' entity_route ' );
$ builder -> addItem ( ' cool_stuff ' );
// ...
}
}
Via les attributs : utilisez simplement l'attribut #[Breadcrumb]
au niveau de la classe et / ou de la méthode. Ils seront fusionnés (la classe passe en premier).
Remarque: l'attribut peut prendre un seul élément (dans l'exemple qu'il est fait au niveau de la classe) ou plusieurs éléments (dans l'exemple, au niveau de la méthode).
<?php
use SlopeIt BreadcrumbBundle Attribute Breadcrumb ;
#[ Breadcrumb ([
' label ' => ' home ' ,
' route ' => ' home_route ' ,
' params ' => [ ' p ' => ' val ' ],
' translationDomain ' => ' domain ' ,
])]
class CoolController extends Controller
{
#[ Breadcrumb ([
[ ' label ' => ' $entity.property ' , ' route ' => ' entity_route ' ],
[ ' label ' => ' cool_stuff ' ],
])]
public function coolStuffAction ()
{
// ...
}
}
La dernière étape consiste à utiliser la fonction de brindilles suivante où que vous souhaitiez que la chapelure est imprimée dans votre modèle:
{{ slope_it_breadcrumb() }}
Quelle que soit la façon dont vous avez utilisé pour créer la chapelure, le résultat sera quelque chose comme:
Home > Value of entity property > Cool stuff
Dans lequel les deux premiers éléments sont des ancres et le dernier est le texte uniquement.
De plus, au cas où vous auriez besoin de savoir si la chapelure a des articles ou non, vous pouvez utiliser:
{{ slope_it_is_breadcrumb_empty() }}
Sous le capot, c'est la logique commerciale impliquée, pour chaque article, dans la génération de rupture de fil:
label
sera le texte imprimé. Cela peut être soit:$
. Dans ce cas, l'étiquette de chapelure sera extraite de la variable transmise au modèle. Les chemins de propriété peuvent être utilisés, par exemple: $variable.property.path
route
sera utilisé pour générer l'URL de l'ancre de l'élément (si fourni). Si ce n'est pas fourni, l'élément ne sera pas cliquable.params
seront utilisés pour générer l'URL liés à l'itinéraire fourni. C'est un tableau associatif où chaque valeur peut être soit:$variable.property.path
. Le traitement est exactement le même que dans "Label". Ceci est utile pour récupérer dynamiquement les paramètres d'URL (par exemple entité ID) à partir des variables de vue.translationDomain
sera utilisé pour traduire la clé fournie dans l'attribut label
. Si null
, le domaine de traduction par défaut sera utilisé. Fournissez false
si vous mettez une chaîne non traduisible dans label
et que vous ne voulez pas l'utiliser comme clé de traduction.Remarque: vous n'avez pas besoin de passer tous les paramètres de route qui sont nécessaires par l'itinéraire, tant que ces paramètres d'itinéraire sont déjà présents dans l'URL pour la demande actuelle . En d'autres termes, si votre structure hiérarchique de chapelure "correspond en quelque sorte" à votre structure URL.
Exemple: Supposons que vous ayez les routes suivantes, avec des paramètres et des URL résultant:
parent_list | | /parents
parent_view | { parent_id: 12345 } | /parents/12345
children_list | { parent_id: 12345 } | /parents/12345/children
child_view | { parent_id: 12345, child_id: 67890 } | /parents/12345/children/67890
child_edit | { parent_id: 12345, child_id: 67890 } | /parents/12345/children/67890/edit
Si vous êtes dans l'action pour Route children_edit
et que vous souhaitez générer une chapelure, y compris toutes les étapes ci-dessus, vous pourrez utiliser l'annotation suivante:
<?php
use SlopeIt BreadcrumbBundle Attribute Breadcrumb ;
#[ Breadcrumb ([
[ ' label ' => ' parents ' , ' route ' => ' parent_list ' ],
[ ' label ' => ' $parent.name ' , ' route ' => ' parent_view ' ],
[ ' label ' => ' children ' , ' route ' => ' children_list ' ],
[ ' label ' => ' $child.name ' , ' route ' => ' child_view ' ],
[ ' label ' => ' edit ' ],
])]
public function childrenEditAction ( $ parentID , $ childrenID )
{
// ...
}
Notez comment vous n'avez pas à fournir les paramètres de route (car la demande actuelle les a déjà tous). Cela fonctionnerait de la même manière si vous le construisez via le code à la place.
Le modèle par défaut du bundle pour rendre la chapelure peut être remplacé en ajoutant les lignes suivantes à la config.yml
de votre application:
slope_it_breadcrumb :
template : YourBundle::breadcrumb.html.twig
Si vous avez l'intention de le faire, il est recommandé de copier Resources/views/breadcrumb.html.twig
à votre bundle et de le personnaliser. Cependant, dans votre modèle, vous n'aurez qu'à itérer la variable items
pour rendre votre rupture de fil personnalisée.
Dans l'une de ces circonstances, veuillez débarquer ce dépôt et créer une demande de traction. Nous sommes plus qu'heureux d'accepter les contributions!