Este paquete proporciona una forma de crear migas de pan "dinámicas" en sus aplicaciones Symfony.
El compositor es el único método de instalación compatible. Ejecute lo siguiente para instalar la última versión de Packagist:
composer require slope-it/breadcrumb-bundle
O, si lo prefiere, puede necesitar cualquier versión en su composer.json
:
{
"require" : {
"slope-it/breadcrumb-bundle" : " * "
}
}
Una vez instalado, cargue el paquete en su clase de núcleo:
// ...
class AppKernel extends Kernel
{
public function registerBundles ()
{
$ bundles = [
// ...
new SlopeIt BreadcrumbBundle SlopeItBreadcrumbBundle (),
];
// ...
}
// ...
}
Hay dos formas de crear una cáscara de pan: a través del código (1) o a través de atributos (2).
Via Código : puede inyectar el Breadcrumb Builder en su controlador y agregar artículos de pan de pan:
<?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 atributos : solo use el atributo #[Breadcrumb]
en el nivel de clase y/o método. Se fusionarán (la clase es lo primero).
Nota: El atributo puede tomar un elemento único (en el ejemplo que se realiza a nivel de clase) o múltiples elementos (en el ejemplo, en el nivel de método).
<?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 ()
{
// ...
}
}
El último paso es usar la siguiente función de ramita donde quiera que se imprima el pan de pan en su plantilla:
{{ slope_it_breadcrumb() }}
Independientemente de la forma en que solía crear la cáscara de pan, el resultado será algo así como:
Home > Value of entity property > Cool stuff
En el que los dos primeros elementos son anclajes y el último es solo texto.
Además, en caso de que necesite saber si el pan de pan tiene artículos o no, puede usar:
{{ slope_it_is_breadcrumb_empty() }}
Bajo el capó, esta es la lógica comercial involucrada, para cada artículo, en la generación de breadcrumb:
label
será el texto impreso. Puede ser:$
. En este caso, la etiqueta BreadCrumb se extraerá de la variable pasada a la plantilla. Las rutas de propiedad se pueden usar, por ejemplo: $variable.property.path
route
se utilizará para generar la URL para el ancla del elemento (si se proporciona). Si no se proporciona, el elemento no se puede hacer clic.params
se utilizarán para generar la URL relacionada con la ruta proporcionada. Es una matriz asociativa donde cada valor puede ser:$variable.property.path
. El tratamiento es exactamente el mismo que en "etiqueta". Esto es útil para recuperar dinámicamente los parámetros de URL (por ejemplo, ID de entidad) a partir de las variables de vista.translationDomain
se utilizará para traducir la clave proporcionada en el atributo label
. Si es null
, se utilizará el dominio de traducción predeterminado. Proporcione false
si coloca una cadena no traducible en label
y no desea usarla como clave de traducción.Nota: No necesita pasar todos los parámetros de ruta que se necesitan por ruta, siempre que estos parámetros de ruta ya estén presentes en la URL para la solicitud actual . En otras palabras, si su estructura jerárquica de pan de pan de alguna manera "coincide" con su estructura de URL.
Ejemplo: suponga que tiene las siguientes rutas, con parámetros y URL resultantes:
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 está en la Acción para la Ruta, children_edit
y desea generar un pan de pan, incluidos todos los pasos anteriores, podrá usar la siguiente anotación:
<?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 )
{
// ...
}
Tenga en cuenta cómo no tiene que proporcionar los parámetros de ruta (ya que la solicitud actual ya los tiene todos). Funcionaría igual si lo construye a través del código en su lugar.
La plantilla predeterminada del paquete para hacer que Breadcrumb se puede anular agregando las siguientes líneas a la config.yml
de su aplicación:
slope_it_breadcrumb :
template : YourBundle::breadcrumb.html.twig
Si tiene la intención de hacer esto, se recomienda copiar Resources/views/breadcrumb.html.twig
a su paquete y personalizarlo. Sin embargo, en su plantilla solo tendrá que iterar sobre las variables items
para representar su bandeja de pan personalizada.
En cualquiera de estas circunstancias, bifurca este repositorio y cree una solicitud de extracción. ¡Estamos más que felices de aceptar contribuciones!