Uma maneira simples no estilo Laravel de criar migalhas de pão.
Este projeto é o fork oficial do fantasticamente original Laravel Breadcrumbs de Dave James Miller e não teria sido possível sem um monte de colaboradores incríveis no primeiro dia. Obrigado a todos!
Laravel | Pão ralado Laravel |
---|---|
11.x | 9.x |
10.x | 9.x |
9.x | 9.x |
8.x | 9.x |
7.x | 8.x |
6.x | 8.x |
Para versões mais antigas do Laravel, consulte o projeto GitHub original. Todas as tags foram espelhadas se você preferir fazer referência a este pacote, mas não fornecerão nenhuma diferença funcional.
composer require diglactic/laravel-breadcrumbs
Crie um arquivo chamado routes/breadcrumbs.php
parecido com este:
<?php // routes/breadcrumbs.php
// Note: Laravel will automatically resolve `Breadcrumbs::` without
// this import. This is nice for IDE syntax and refactoring.
use Diglactic Breadcrumbs Breadcrumbs ;
// This import is also not required, and you could replace `BreadcrumbTrail $trail`
// with `$trail`. This is nice for IDE type checking and completion.
use Diglactic Breadcrumbs Generator as BreadcrumbTrail ;
// Home
Breadcrumbs:: for ( ' home ' , function ( BreadcrumbTrail $ trail ) {
$ trail -> push ( ' Home ' , route ( ' home ' ));
});
// Home > Blog
Breadcrumbs:: for ( ' blog ' , function ( BreadcrumbTrail $ trail ) {
$ trail -> parent ( ' home ' );
$ trail -> push ( ' Blog ' , route ( ' blog ' ));
});
// Home > Blog > [Category]
Breadcrumbs:: for ( ' category ' , function ( BreadcrumbTrail $ trail , $ category ) {
$ trail -> parent ( ' blog ' );
$ trail -> push ( $ category -> title , route ( ' category ' , $ category ));
});
Consulte a seção Definindo Breadcrumbs para obter mais detalhes.
Por padrão, uma lista de navegação do Bootstrap 5 será renderizada. Para alterar isso, inicialize o arquivo de configuração executando este comando:
php artisan vendor:publish --tag=breadcrumbs-config
Em seguida, abra config/breadcrumbs.php
e edite esta linha:
// config/breadcrumbs.php
' view ' => ' breadcrumbs::bootstrap5 ' ,
Os valores possíveis são:
breadcrumbs::bootstrap5
– Bootstrap 5breadcrumbs::bootstrap4
– Bootstrap 4breadcrumbs::bulma
– Bulmabreadcrumbs::foundation6
– Fundação 6breadcrumbs::json-ld
– Dados estruturados JSON-LDbreadcrumbs::materialize
– Materializarbreadcrumbs::tailwind
– Tailwind CSSbreadcrumbs::uikit
– UIkitpartials.breadcrumbs
Consulte a seção Modelos personalizados para obter mais detalhes.
Você também pode especificar uma visualização personalizada em tempo de execução.
Chame Breadcrumbs::render()
na visualização de cada página, passando o nome da localização atual a ser usada e quaisquer parâmetros adicionais:
{{-- resources/views/home.blade.php --}}
{{ Breadcrumbs :: render ( ' home ' ) } }
{{-- resources/views/categories/show.blade.php --}}
{{ Breadcrumbs :: render ( ' category ' , $category ) } }
Consulte a seção Produzindo Breadcrumbs para outras opções de saída e consulte Route-Bound Breadcrumbs para obter uma maneira de vincular nomes de breadcrumbs a nomes de rotas automaticamente.
A localização atual geralmente corresponderá a ações ou tipos de página. Para cada localização atual, você especifica um nome, o título da localização atual e o URL ao qual vinculá-la. Como é provável que elas mudem dinamicamente, você faz isso em um encerramento e passa quaisquer variáveis necessárias para o encerramento.
Os exemplos a seguir devem deixar isso claro:
A localização atual mais simples provavelmente será sua página inicial, que será mais ou menos assim:
<?php // routes/breadcrumbs.php
use Diglactic Breadcrumbs Breadcrumbs ;
use Diglactic Breadcrumbs Generator as BreadcrumbTrail ;
Breadcrumbs:: for ( ' home ' , function ( BreadcrumbTrail $ trail ) {
$ trail -> push ( ' Home ' , route ( ' home ' ));
});
Para gerar a URL, você pode usar qualquer um dos métodos padrão de geração de URL do Laravel, incluindo:
url('path/to/route')
( URL::to()
)secure_url('path/to/route')
route('routename')
ou route('routename', 'param')
ou route('routename', ['param1', 'param2'])
( URL::route()
)action('controller@action')
( URL::action()
)'http://www.example.com/'
)Este exemplo seria renderizado assim:
{{ Breadcrumbs :: render ( ' home ' ) } }
E resulte nesta saída:
Lar
Esta é outra página estática, mas com um link pai antes dela:
<?php // routes/breadcrumbs.php
use Diglactic Breadcrumbs Breadcrumbs ;
use Diglactic Breadcrumbs Generator as BreadcrumbTrail ;
Breadcrumbs:: for ( ' blog ' , function ( BreadcrumbTrail $ trail ) {
$ trail -> parent ( ' home ' );
$ trail -> push ( ' Blog ' , route ( ' blog ' ));
});
Funciona chamando o fechamento da trilha home
definida acima.
Seria renderizado assim:
{{ Breadcrumbs :: render ( ' blog ' ) } }
E resulte nesta saída:
Início / Blogue
Observe que os modelos padrão não criam um link para a última localização atual (aquela da página atual), mesmo quando uma URL é especificada. Você pode substituir isso criando seu próprio modelo – consulte Modelos personalizados para obter mais detalhes.
Esta é uma página gerada dinamicamente extraída do banco de dados:
<?php // routes/breadcrumbs.php
use App Models Post ;
use Diglactic Breadcrumbs Breadcrumbs ;
use Diglactic Breadcrumbs Generator as BreadcrumbTrail ;
Breadcrumbs:: for ( ' post ' , function ( BreadcrumbTrail $ trail , Post $ post ) {
$ trail -> parent ( ' blog ' );
$ trail -> push ( $ post -> title , route ( ' post ' , $ post ));
});
O objeto $post
(provavelmente um modelo Eloquent, mas pode ser qualquer coisa) seria passado a partir da view:
{{ Breadcrumbs :: render ( ' post ' , $post ) } }
Isso resulta nesta saída:
Início / Blog / Título da postagem
Você também pode encadear chamadas de método para $trail
. Se você estiver usando PHP 7.4 e superior com suporte a função de seta, você pode preferir a seguinte sintaxe mais concisa:
Breadcrumbs:: for (
' post ' ,
fn ( BreadcrumbTrail $ trail , Post $ post ) => $ trail
-> parent ( ' blog ' )
-> push ( $ post -> title , route ( ' post ' , $ post ))
);
Finalmente, se você tiver categorias aninhadas ou outros requisitos especiais, poderá chamar $trail->push()
várias vezes:
<?php // routes/breadcrumbs.php
use App Models Category ;
use Diglactic Breadcrumbs Breadcrumbs ;
use Diglactic Breadcrumbs Generator as BreadcrumbTrail ;
Breadcrumbs:: for ( ' category ' , function ( BreadcrumbTrail $ trail , Category $ category ) {
$ trail -> parent ( ' blog ' );
foreach ( $ category -> ancestors as $ ancestor ) {
$ trail -> push ( $ ancestor -> title , route ( ' category ' , $ ancestor ));
}
$ trail -> push ( $ category -> title , route ( ' category ' , $ category ));
});
Alternativamente, você poderia criar uma função recursiva como esta:
<?php // routes/breadcrumbs.php
use App Models Category ;
use Diglactic Breadcrumbs Breadcrumbs ;
use Diglactic Breadcrumbs Generator as BreadcrumbTrail ;
Breadcrumbs:: for ( ' category ' , function ( BreadcrumbTrail $ trail , Category $ category ) {
if ( $ category -> parent ) {
$ trail -> parent ( ' category ' , $ category -> parent );
} else {
$ trail -> parent ( ' blog ' );
}
$ trail -> push ( $ category -> title , route ( ' category ' , $ category -> slug ));
});
Ambos seriam renderizados assim:
{{ Breadcrumbs :: render ( ' category ' , $category ) } }
E resulta nisso:
Home / Blog / Categoria Avós / Categoria Pai / Título da categoria
Para personalizar o HTML, crie seu próprio arquivo de visualização semelhante ao seguinte:
{{-- resources/views/partials/breadcrumbs.blade.php --}}
@unless ( $breadcrumbs -> isEmpty () )
< ol class = " breadcrumb " >
@foreach ( $breadcrumbs as $breadcrumb )
@if ( ! is_null ( $breadcrumb -> url ) && ! $loop -> last )
< li class = " breadcrumb-item " >< a href = " {{ $breadcrumb -> url } } " > {{ $breadcrumb -> title } } </ a ></ li >
@else
< li class = " breadcrumb-item active " > {{ $breadcrumb -> title } } </ li >
@endif
@endforeach
</ ol >
@endunless
Se você quiser trabalhar com um modelo integrado existente, execute o seguinte comando:
php artisan vendor:publish --tag=breadcrumbs-views
Isso copiará todos os modelos integrados no diretório resources/views/vendor/breadcrumbs/
do seu projeto, permitindo que você faça edições diretamente.
A visualização receberá uma coleção chamada $breadcrumbs
.
Cada breadcrumb é um objeto com as seguintes chaves:
title
– O título da localização atualurl
– O URL de localização atual ou null
se nenhum foi fornecido$data
(consulte Dados personalizados)Em seguida, atualize seu arquivo de configuração com o nome da visualização personalizada:
// config/breadcrumbs.php
' view ' => ' partials.breadcrumbs ' , // --> resources/views/partials/breadcrumbs.blade.php
Alternativamente, você pode pular a visualização personalizada e chamar Breadcrumbs::generate()
para obter a coleção de breadcrumbs diretamente:
@foreach ( Breadcrumbs :: generate ( ' post ' , $post ) as $breadcrumb )
{{-- ... --}}
@endforeach
Chame Breadcrumbs::render()
na visualização de cada página, passando o nome da localização atual a ser usada e quaisquer parâmetros adicionais.
{{ Breadcrumbs :: render ( ' home ' ) } }
Ou com um parâmetro:
{{ Breadcrumbs :: render ( ' category ' , $category ) } }
Para renderizar breadcrumbs como dados estruturados JSON-LD (geralmente por motivos de SEO), use Breadcrumbs::view()
para renderizar o modelo breadcrumbs::json-ld
além do normal. Por exemplo:
< html >
< head >
...
{{ Breadcrumbs :: view ( ' breadcrumbs::json-ld ' , ' category ' , $category ) } }
...
</ head >
< body >
...
{{ Breadcrumbs :: render ( ' category ' , $category ) } }
...
</ body >
</ html >
(Observação: se você usar o Laravel Page Speed, pode ser necessário desabilitar o middleware TrimUrls
.)
Para especificar uma imagem, adicione-a ao parâmetro $data
em push()
:
<?php // routes/breadcrumbs.php
use App Models Post ;
use Diglactic Breadcrumbs Breadcrumbs ;
use Diglactic Breadcrumbs Generator as BreadcrumbTrail ;
Breadcrumbs:: for ( ' post ' , function ( BreadcrumbTrail $ trail , Post $ post ) {
$ trail -> parent ( ' home ' );
$ trail -> push ( $ post -> title , route ( ' post ' , $ post ), [ ' image ' => asset ( $ post -> image )]);
});
(Se preferir usar Microdata ou RDFa, você precisará criar um modelo personalizado.)
No uso normal, você deve chamar Breadcrumbs::render($name, $params...)
para renderizar a localização atual em cada página. Se preferir, você pode nomear sua localização atual da mesma forma que suas rotas e evitar essa duplicação.
Certifique-se de que cada uma de suas rotas tenha um nome.
<?php // routes/web.php
use Illuminate Support Facades Route ;
// Home
Route:: name ( ' home ' )-> get ( ' / ' , ' HomeController@index ' );
// Home > [Post]
Route:: name ( ' post ' )-> get ( ' /post/{id} ' , ' PostController@show ' );
Para mais detalhes, veja Rotas Nomeadas na documentação do Laravel.
Para cada rota, crie uma localização atual com o mesmo nome e parâmetros. Por exemplo:
<?php // routes/breadcrumbs.php
use App Models Post ;
use Diglactic Breadcrumbs Breadcrumbs ;
use Diglactic Breadcrumbs Generator as BreadcrumbTrail ;
// Home
Breadcrumbs:: for ( ' home ' , function ( BreadcrumbTrail $ trail ) {
$ trail -> push ( ' Home ' , route ( ' home ' ));
});
// Home > [Post]
Breadcrumbs:: for ( ' post ' , function ( BreadcrumbTrail $ trail , Post $ post ) {
$ trail -> parent ( ' home ' );
$ trail -> push ( $ post -> title , route ( ' post ' , $ post ));
});
Para adicionar trilhas de navegação a uma página 404 Not Found personalizada, use o nome errors.404
:
Breadcrumbs:: for ( ' errors.404 ' , function ( BreadcrumbTrail $ trail ) {
$ trail -> parent ( ' home ' );
$ trail -> push ( ' Page Not Found ' );
});
Chame Breadcrumbs::render()
sem parâmetros em seu arquivo de layout:
{{-- resources/views/app.blade.php --}}
{{ Breadcrumbs :: render () } }
Isso gerará automaticamente trilhas correspondentes à rota atual. O mesmo se aplica a Breadcrumbs::generate()
e Breadcrumbs::view()
:
Lançaremos uma InvalidBreadcrumbException
se a localização atual não existir, para lembrá-lo de criar uma. Para desativar isso (por exemplo, se você tiver algumas páginas sem localização atual), primeiro inicialize o arquivo de configuração, se ainda não o fez:
php artisan vendor:publish --tag=breadcrumbs-config
Em seguida, abra o arquivo recém-criado e defina este valor:
// config/breadcrumbs.php
' missing-route-bound-breadcrumb-exception ' => false,
Da mesma forma, para evitar que seja lançada uma UnnamedRouteException
se a rota atual não tiver um nome, defina este valor:
// config/breadcrumbs.php
' unnamed-route-exception ' => false,
Laravel Breadcrumbs usa a mesma ligação de modelo que o controlador. Por exemplo:
<?php // routes/web.php
use Illuminate Support Facades Route ;
Route:: name ( ' post ' )-> get ( ' /post/{post} ' , ' PostController@show ' );
<?php // app/Http/Controllers/PostController.php
use App Http Controllers Controller ;
use App Models Post ;
use Illuminate Contracts View View ;
class PostController extends Controller
{
public function show ( Post $ post ): View // <-- Route bound model is injected here
{
return view ( ' post/show ' , [ ' post ' => $ post ]);
}
}
<?php // routes/breadcrumbs.php
use App Models Post ;
use Diglactic Breadcrumbs Breadcrumbs ;
use Diglactic Breadcrumbs Generator as BreadcrumbTrail ;
Breadcrumbs:: for ( ' post ' , function ( BreadcrumbTrail $ trail , Post $ post ) { // <-- The same Post model is injected here
$ trail -> parent ( ' home ' );
$ trail -> push ( $ post -> title , route ( ' post ' , $ post ));
});
Isso torna seu código menos detalhado e mais eficiente, carregando a postagem do banco de dados apenas uma vez.
Para mais detalhes veja Route Model Binding na documentação do Laravel.
O Laravel cria automaticamente nomes de rotas para controladores engenhosos, por exemplo photo.index
, que você pode usar ao definir sua localização atual. Por exemplo:
<?php // routes/web.php
use App Http Controllers PhotoController ;
use Illuminate Support Facades Route ;
Route:: resource ( ' photo ' , PhotoController::class);
$ php artisan route:list
+--------+----------+--------------------+---------------+-------------------------+------------+
| Domain | Method | URI | Name | Action | Middleware |
+--------+----------+--------------------+---------------+-------------------------+------------+
| | GET|HEAD | photo | photo.index | PhotoController@index | |
| | GET|HEAD | photo/create | photo.create | PhotoController@create | |
| | POST | photo | photo.store | PhotoController@store | |
| | GET|HEAD | photo/{photo} | photo.show | PhotoController@show | |
| | GET|HEAD | photo/{photo}/edit | photo.edit | PhotoController@edit | |
| | PUT | photo/{photo} | photo.update | PhotoController@update | |
| | PATCH | photo/{photo} | | PhotoController@update | |
| | DELETE | photo/{photo} | photo.destroy | PhotoController@destroy | |
+--------+----------+--------------------+---------------+-------------------------+------------+
<?php // routes/breadcrumbs.php
use App Models Photo ;
use Diglactic Breadcrumbs Breadcrumbs ;
use Diglactic Breadcrumbs Generator as BreadcrumbTrail ;
// Photos
Breadcrumbs:: for ( ' photo.index ' , function ( BreadcrumbTrail $ trail ) {
$ trail -> parent ( ' home ' );
$ trail -> push ( ' Photos ' , route ( ' photo.index ' ));
});
// Photos > Upload Photo
Breadcrumbs:: for ( ' photo.create ' , function ( BreadcrumbTrail $ trail ) {
$ trail -> parent ( ' photo.index ' );
$ trail -> push ( ' Upload Photo ' , route ( ' photo.create ' ));
});
// Photos > [Photo Name]
Breadcrumbs:: for ( ' photo.show ' , function ( BreadcrumbTrail $ trail , Photo $ photo ) {
$ trail -> parent ( ' photo.index ' );
$ trail -> push ( $ photo -> title , route ( ' photo.show ' , $ photo ));
});
// Photos > [Photo Name] > Edit Photo
Breadcrumbs:: for ( ' photo.edit ' , function ( BreadcrumbTrail $ trail , Photo $ photo ) {
$ trail -> parent ( ' photo.show ' , $ photo );
$ trail -> push ( ' Edit Photo ' , route ( ' photo.edit ' , $ photo ));
});
Para mais detalhes veja Controladores de Recursos na documentação do Laravel.
(FAQ relacionada: Por que não existe o método Breadcrumbs::resource()?.)
O segundo parâmetro para push()
é opcional, então se você quiser uma localização atual sem URL, você pode fazer:
$ trail -> push ( ' Sample ' );
Neste caso, $breadcrumb->url
será null
.
Os modelos padrão do Bootstrap fornecidos renderizam isso com uma classe CSS "ativa", a mesma da última localização atual, porque, caso contrário, o padrão é o texto preto e não cinza, o que não parece correto.
O método push()
aceita um terceiro parâmetro opcional, $data
– uma matriz de matriz associativa arbitrária de dados a ser passada para a localização atual, que você pode usar em seu modelo personalizado.
Se você quiser que cada localização atual tenha um ícone, por exemplo, você pode fazer:
$ trail -> push ( ' Home ' , ' / ' , [ ' icon ' => ' home.png ' ]);
As entradas da matriz $data
serão mescladas na trilha como propriedades.
< li >
< a href = " {{ $breadcrumb -> url } } " >
< img src = " /images/icons/ {{ $breadcrumb -> icon } } " >
{{ $breadcrumb -> title } }
</ a >
</ li >
Nota: não utilize as chaves title
ou url
, pois elas serão sobrescritas.
Você pode registrar retornos de chamada "antes" e "depois" para adicionar trilhas no início/fim da trilha. Por exemplo, para adicionar automaticamente o número da página atual no final:
<?php // routes/breadcrumbs.php
use Diglactic Breadcrumbs Breadcrumbs ;
use Diglactic Breadcrumbs Generator as BreadcrumbTrail ;
Breadcrumbs:: after ( function ( BreadcrumbTrail $ trail ) {
$ page = ( int ) request ( ' page ' , 1 );
if ( $ page > 1 ) {
$ trail -> push ( " Page { $ page }" );
}
});
Para obter a última localização atual da página atual, use Breadcrumb::current()
. Por exemplo, você poderia usar isto para gerar o título da página atual:
< title > {{ ( $breadcrumb = Breadcrumbs :: current ()) ? $breadcrumb -> title : ' Fallback Title ' } } </ title >
Para ignorar uma localização atual, adicione 'current' => false
ao parâmetro $data
em push()
. Isso pode ser útil para ignorar a localização atual da paginação:
<?php // routes/breadcrumbs.php
use Diglactic Breadcrumbs Breadcrumbs ;
use Diglactic Breadcrumbs Generator as BreadcrumbTrail ;
Breadcrumbs:: after ( function ( BreadcrumbTrail $ trail ) {
$ page = ( int ) request ( ' page ' , 1 );
if ( $ page > 1 ) {
$ trail -> push ( " Page { $ page }" , null , [ ' current ' => false ]);
}
});
< title >
{{ ( $breadcrumb = Breadcrumbs :: current ()) ? " $breadcrumb -> title – " : ' ' } }
{{ ( $page = ( int ) request ( ' page ' )) > 1 ? " Page $page – " : ' ' } }
Demo App
</ title >
Para uma filtragem mais avançada, use Breadcrumbs::generate()
e os métodos da classe Collection do Laravel:
<?php
use Diglactic Breadcrumbs Breadcrumbs ;
$ current = Breadcrumbs:: generate ()-> where ( ' current ' , ' !== ' , false )-> last ();
Você pode usar Breadcrumbs::view()
no lugar de Breadcrumbs::render()
para renderizar um modelo diferente do padrão:
{{ Breadcrumbs :: view ( ' partials.breadcrumbs2 ' , ' category ' , $category ) } }
Ou você pode substituir a configuração para afetar todas as chamadas futuras render()
:
<?php
use Illuminate Support Facades Config ;
Config:: set ( ' breadcrumbs.view ' , ' partials.breadcrumbs2 ' );
{{ Breadcrumbs :: render ( ' category ' , $category ) } }
Ou você pode chamar Breadcrumbs::generate()
para obter a coleção de breadcrumbs e carregar a visualização manualmente:
@include ( ' partials.breadcrumbs2 ' , [ ' breadcrumbs ' => Breadcrumbs :: generate ( ' category ' , $category )] )
Se você chamar Breadcrumbs::render()
ou Breadcrumbs::generate()
sem parâmetros, ele usará o nome da rota atual e os parâmetros por padrão (conforme retornado pelo método Route::current()
do Laravel).
Você pode substituir isso chamando Breadcrumbs::setCurrentRoute($name, $param1, $param2...)
.
Para verificar se existe uma localização atual com um determinado nome, chame Breadcrumbs::exists('name')
, que retorna um booleano.
Se você não quiser usar routes/breadcrumbs.php
, você pode alterá-lo no arquivo de configuração. Primeiro inicialize o arquivo de configuração, se ainda não o fez:
php artisan vendor:publish --tag=breadcrumbs-config
Atualize esta linha:
// config/breadcrumbs.php
' files ' => base_path ( ' routes/breadcrumbs.php ' ),
Pode ser um caminho absoluto, como acima, ou um array:
' files ' => [
base_path ( ' breadcrumbs/admin.php ' ),
base_path ( ' breadcrumbs/frontend.php ' ),
],
Então você pode usar glob()
para encontrar arquivos automaticamente usando um curinga:
' files ' => glob ( base_path ( ' breadcrumbs/*.php ' )),
Ou retorne um array vazio []
para desabilitar o carregamento.
Se você estiver criando seu próprio pacote, simplesmente carregue seu arquivo de localização atual do método boot()
do seu provedor de serviços:
use Illuminate Support ServiceProvider ;
class MyServiceProvider extends ServiceProvider
{
public function boot (): void
{
if ( class_exists ( ' Breadcrumbs ' )) {
require __DIR__ . ' /breadcrumbs.php ' ;
}
}
}
Você pode usar injeção de dependência para acessar a instância Manager
se preferir, em vez de usar a fachada Breadcrumbs::
<?php
use Diglactic Breadcrumbs Manager ;
use Illuminate Support ServiceProvider ;
class MyServiceProvider extends ServiceProvider
{
public function boot ( Manager $ breadcrumbs ): void
{
$ breadcrumbs -> for (...);
}
}
A classe Breadcrumbs Manager
é macro, então você pode adicionar seus próprios métodos. Por exemplo:
<?php
use Diglactic Breadcrumbs Breadcrumbs ;
Breadcrumbs:: macro ( ' pageTitle ' , function () {
$ title = ( $ breadcrumb = Breadcrumbs:: current ()) ? "{ $ breadcrumb -> title } – " : '' ;
if (( $ page = ( int ) request ( ' page ' )) > 1 ) {
$ title .= " Page $ page – " ;
}
return "{ $ title } - Demo App " ;
});
< title > {{ Breadcrumbs :: pageTitle () } } </ title >
Para personalizações mais avançadas, você pode subclassificar BreadcrumbsManager
e/ou BreadcrumbsGenerator
e atualizar o arquivo de configuração com o novo nome da classe:
// breadcrumbs/config.php
' manager-class ' => Diglactic Breadcrumbs Manager::class,
' generator-class ' => Diglactic Breadcrumbs Generator::class,
Nota: a sintaxe de configuração pode mudar entre as versões.
Breadcrumbs::resource()
? Algumas pessoas sugeriram adicionar Breadcrumbs::resource()
para corresponder Route::resource()
, mas ninguém criou uma boa implementação que a) seja flexível o suficiente para lidar com traduções, recursos aninhados, etc., e b ) não é excessivamente complexo como resultado.
Você sempre pode criar o seu próprio usando Breadcrumbs::macro()
. Aqui está um bom ponto de partida:
<?php // routes/breadcrumbs.php
use App Models SomeModel ;
use Diglactic Breadcrumbs Breadcrumbs ;
use Diglactic Breadcrumbs Generator as BreadcrumbTrail ;
Breadcrumbs:: macro ( ' resource ' , function ( string $ name , string $ title ) {
// Home > Blog
Breadcrumbs:: for ( "{ $ name } .index " , function ( BreadcrumbTrail $ trail ) use ( $ name , $ title ) {
$ trail -> parent ( ' home ' );
$ trail -> push ( $ title , route ( "{ $ name } .index " ));
});
// Home > Blog > New
Breadcrumbs:: for ( "{ $ name } .create " , function ( BreadcrumbTrail $ trail ) use ( $ name ) {
$ trail -> parent ( "{ $ name } .index " );
$ trail -> push ( ' New ' , route ( "{ $ name } .create " ));
});
// Home > Blog > Post 123
Breadcrumbs:: for ( "{ $ name } .show " , function ( BreadcrumbTrail $ trail , SomeModel $ model ) use ( $ name ) {
$ trail -> parent ( "{ $ name } .index " );
$ trail -> push ( $ model -> title , route ( "{ $ name } .show " , $ model ));
});
// Home > Blog > Post 123 > Edit
Breadcrumbs:: for ( "{ $ name } .edit " , function ( BreadcrumbTrail $ trail , SomeModel $ model ) use ( $ name ) {
$ trail -> parent ( "{ $ name } .show " , $ model );
$ trail -> push ( ' Edit ' , route ( "{ $ name } .edit " , $ model ));
});
});
Breadcrumbs:: resource ( ' blog ' , ' Blog ' );
Breadcrumbs:: resource ( ' photos ' , ' Photos ' );
Breadcrumbs:: resource ( ' users ' , ' Users ' );
Observe que isso não trata de traduções ou recursos aninhados e pressupõe que todos os modelos tenham um atributo title
(o que os usuários provavelmente não têm). Adapte-o como achar melhor.
composer update diglactic/laravel-breadcrumbs
para atualizar.php artisan package:discover
para garantir que o provedor de serviços seja detectado pelo Laravel. routes/breadcrumbs.php
por padrão).dd(__FILE__)
no arquivo para ter certeza de que está carregado.dd($files)
em ServiceProvider::registerBreadcrumbs()
para verificar se o caminho está correto.php artisan config:clear
(ou exclua manualmente bootstrap/cache/config.php
) ou atualize o caminho em config/breadcrumbs.php
.missing-route-bound-breadcrumb-exception
como false
no arquivo de configuração para desabilitar a verificação (mas você não será avisado se perder alguma página). php artisan config:clear
(ou exclua manualmente bootstrap/cache/config.php
) ou atualize o caminho em config/breadcrumbs.php
. {{ Breadcrumbs::render() }}
ou {{ Breadcrumbs::view() }}
, não @include()
. Documentação: Se você acha que a documentação pode ser melhorada de alguma forma, edite este arquivo e faça uma solicitação pull.
Correções de bugs: corrija-o e abra uma solicitação pull. (Veja abaixo instruções mais detalhadas.) Pontos de bônus se você adicionar um teste de unidade para garantir que isso não aconteça novamente!
Novos recursos: somente recursos com um caso de uso claro e API bem considerada serão aceitos. Eles devem ser documentados e incluir testes unitários. Em caso de dúvida, faça uma prova de conceito (código ou documentação) e abra uma solicitação pull para discutir os detalhes. (Dica: se você quiser que um recurso muito específico seja incluído por padrão, consulte Macros ou Uso Avançado para saber como adicioná-los.)
A maneira mais fácil de trabalhar no Laravel Breadcrumbs é dizer ao Composer para instalá-lo a partir do código-fonte (Git) usando o sinalizador --prefer-source
:
rm -rf vendor/diglactic/laravel-breadcrumbs
composer install --prefer-source
Em seguida, verifique o branch principal e crie seu próprio branch local para trabalhar:
cd vendor/diglactic/laravel-breadcrumbs
git checkout -t origin/main
git checkout -b YOUR_BRANCH
Agora faça suas alterações, incluindo testes unitários e documentação (se apropriado). Execute os testes de unidade para ter certeza de que tudo ainda está funcionando:
vendor/bin/phpunit
Em seguida, confirme as alterações. Bifurque o repositório no GitHub, se ainda não o fez, e envie suas alterações para ele:
git remote add YOUR_USERNAME [email protected]:YOUR_USERNAME/laravel-breadcrumbs.git
git push -u YOUR_USERNAME YOUR_BRANCH
Por fim, navegue até o repositório no GitHub e crie uma solicitação pull.
Para usar seu próprio fork em um projeto, atualize o composer.json
em seu projeto principal da seguinte maneira:
{
// ADD THIS:
"repositories" : [
{
"type" : "vcs" ,
"url" : "https://github.com/YOUR_USERNAME/laravel-breadcrumbs.git"
}
] ,
"require" : {
// UPDATE THIS:
"diglactic/laravel-breadcrumbs" : "dev-YOUR_BRANCH"
}
}
Substitua YOUR_USERNAME
pelo seu nome de usuário do GitHub e YOUR_BRANCH
pelo nome do branch (por exemplo, develop
). Isso diz ao Composer para usar seu repositório em vez do padrão.
Para executar os testes de unidade:
vendor/bin/phpunit
Para executar os testes de unidade e reconstruir snapshots:
vendor/bin/phpunit -d --update-snapshots
Para verificar a cobertura do código:
vendor/bin/phpunit --coverage-html test-coverage
Em seguida, abra test-coverage/index.html
para ver os resultados. Esteja ciente dos casos extremos no PHPUnit que podem torná-lo não muito preciso.
Os seguintes arquivos precisarão ser atualizados para executar testes em uma nova versão do Laravel:
composer.json
laravel/framework
(versões Laravel)php
(versão mínima do PHP) tests.yml
jobs.phpunit.strategy.matrix.laravel
(versões Laravel)jobs.phpunit.strategy.matrix.php
(versões PHP)jobs.phpunit.strategy.matrix.exclude
(combinações não suportadas)E a seguinte documentação, conforme necessário:
README.md
UPGRADE.md
Laravel Breadcrumbs é um software de código aberto licenciado sob a licença MIT.