Este pacote fornece uma maneira de criar uma farinha de pão "dinâmica" em seus aplicativos de simfonia.
O compositor é o único método de instalação suportado. Execute o seguinte para instalar a versão mais recente do Packagist:
composer require slope-it/breadcrumb-bundle
Ou, se preferir, pode exigir qualquer versão em seu composer.json
:
{
"require" : {
"slope-it/breadcrumb-bundle" : " * "
}
}
Depois de instalado, carregue o pacote na sua classe de kernel:
// ...
class AppKernel extends Kernel
{
public function registerBundles ()
{
$ bundles = [
// ...
new SlopeIt BreadcrumbBundle SlopeItBreadcrumbBundle (),
];
// ...
}
// ...
}
Existem duas maneiras de criar uma farinha de pão: via código (1) ou via atributos (2).
Via código : você pode injetar o construtor de breção no seu controlador e adicionar itens de breção:
<?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 : basta usar o atributo #[Breadcrumb]
no nível de classe e/ou método. Eles serão mesclados (a classe vem em primeiro lugar).
Nota: o atributo pode levar um único item (no exemplo que é feito no nível da classe) ou vários itens (no exemplo, no nível do 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 ()
{
// ...
}
}
A última etapa é usar a seguinte função TWIG onde quiser que a farinha de pão impressa em seu modelo:
{{ slope_it_breadcrumb() }}
Independentemente da maneira como você costumava criar a farinha de pão, o resultado será algo como:
Home > Value of entity property > Cool stuff
Em que os dois primeiros itens são âncoras e o último é apenas o texto.
Além disso, caso você precise saber se a transferência tem itens ou não, você pode usar:
{{ slope_it_is_breadcrumb_empty() }}
Sob o capô, esta é a lógica de negócios envolvida, para cada item, na geração de pão:
label
será o texto impresso. Pode ser:$
. Nesse caso, a etiqueta da farinha de pão será extraída da variável passada para o modelo. Os caminhos da propriedade podem ser usados, por exemplo: $variable.property.path
route
será usada para gerar o URL para a âncora do item (se fornecido). Se não for fornecido, o item não será clicável.params
serão usados para gerar o URL relacionado à rota fornecida. É uma matriz associativa em que cada valor pode ser:$variable.property.path
. O tratamento é exatamente o mesmo de "Rótulo". Isso é útil para recuperar dinamicamente os parâmetros de URL (por exemplo, ID da entidade) a partir das variáveis de exibição.translationDomain
será usado para traduzir a chave fornecida no atributo label
. Se null
, o domínio de tradução padrão será usado. Forneça false
se você colocar uma string não translatável no label
e não desejar usá-la como uma chave de tradução.Nota: Você não precisa passar todos os parâmetros de rota necessários por rota, desde que esses parâmetros de rota já estejam presentes na URL para a solicitação atual . Em outras palavras, se a sua estrutura hierárquica de farinha de pão de alguma forma "corresponde" à sua estrutura de URL.
Exemplo: Suponha que você tenha as seguintes rotas, com parâmetros e URLs 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
Se você estiver em ação para a rota children_edit
e deseja gerar uma troca de pão, incluindo todas as etapas acima, poderá usar a seguinte anotação:
<?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 )
{
// ...
}
Observe como você não precisa fornecer os parâmetros da rota (já que a solicitação atual já possui todos eles). Funcionaria o mesmo se você o construísse via código.
O modelo padrão do pacote para renderizar a farinha de pão pode ser substituído adicionando as seguintes linhas ao config.yml
do seu aplicativo:
slope_it_breadcrumb :
template : YourBundle::breadcrumb.html.twig
Se você pretende fazer isso, é recomendável copiar Resources/views/breadcrumb.html.twig
para o seu pacote e personalizá -lo. No entanto, no seu modelo, você terá que iterar sobre a variável items
para renderizar sua troca de pão personalizada.
Sob qualquer uma dessas circunstâncias, bire este repositório e crie uma solicitação de tração. Estamos mais do que felizes em aceitar contribuições!