Eine einfache Methode zur Herstellung von Semmelbröseln im Laravel-Stil.
Dieses Projekt ist der offizielle Ableger der fantastisch originellen Laravel Breadcrumbs von Dave James Miller und wäre ohne eine Reihe großartiger Mitwirkender vom ersten Tag an nicht möglich gewesen. Vielen Dank an alle!
| Laravel | Laravel-Semmelbrösel |
|---|---|
| 11.x | 9.x |
| 10.x | 9.x |
| 9.x | 9.x |
| 8.x | 9.x |
| 7.x | 8.x |
| 6.x | 8.x |
Verweisen Sie für ältere Laravel-Versionen auf das ursprüngliche GitHub-Projekt. Wenn Sie lieber auf dieses Paket verweisen möchten, wurden alle Tags gespiegelt, führen jedoch zu keinem funktionalen Unterschied.
composer require diglactic/laravel-breadcrumbs Erstellen Sie eine Datei mit dem Namen routes/breadcrumbs.php , die wie folgt aussieht:
<?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 ));
});Weitere Einzelheiten finden Sie im Abschnitt Definieren von Breadcrumbs.
Standardmäßig wird eine Bootstrap 5-Breadcrumb-Liste gerendert. Um dies zu ändern, initialisieren Sie die Konfigurationsdatei, indem Sie diesen Befehl ausführen:
php artisan vendor:publish --tag=breadcrumbs-config Öffnen Sie dann config/breadcrumbs.php und bearbeiten Sie diese Zeile:
// config/breadcrumbs.php
' view ' => ' breadcrumbs::bootstrap5 ' ,Die möglichen Werte sind:
breadcrumbs::bootstrap5 – Bootstrap 5breadcrumbs::bootstrap4 – Bootstrap 4breadcrumbs::bulma – Bulmabreadcrumbs::foundation6 – Stiftung 6breadcrumbs::json-ld – Strukturierte JSON-LD-Datenbreadcrumbs::materialize – Materialisierenbreadcrumbs::tailwind – Rückenwind-CSSbreadcrumbs::uikit – UIkitpartials.breadcrumbs .Weitere Informationen finden Sie im Abschnitt „Benutzerdefinierte Vorlagen“.
Sie können zur Laufzeit auch eine benutzerdefinierte Ansicht angeben.
Rufen Sie Breadcrumbs::render() in der Ansicht für jede Seite auf und übergeben Sie ihm den Namen des zu verwendenden Breadcrumbs sowie alle zusätzlichen Parameter:
{{-- resources/views/home.blade.php --}}
{{ Breadcrumbs :: render ( ' home ' ) } }
{{-- resources/views/categories/show.blade.php --}}
{{ Breadcrumbs :: render ( ' category ' , $category ) } }Weitere Ausgabeoptionen finden Sie im Abschnitt „Breadcrumbs ausgeben“ und unter „Routengebundene Breadcrumbs“ finden Sie eine Möglichkeit, Breadcrumb-Namen automatisch mit Routennamen zu verknüpfen.
Breadcrumbs entsprechen normalerweise Aktionen oder Seitentypen. Für jeden Breadcrumb geben Sie einen Namen, den Breadcrumb-Titel und die URL an, mit der er verknüpft werden soll. Da sich diese wahrscheinlich dynamisch ändern, tun Sie dies in einem Abschluss und übergeben alle benötigten Variablen an den Abschluss.
Folgende Beispiele sollen es verdeutlichen:
Der einfachste Breadcrumb wird wahrscheinlich Ihre Homepage sein, die etwa so aussehen wird:
<?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 ' ));
});Zum Generieren der URL können Sie eine der standardmäßigen Laravel-URL-Generierungsmethoden verwenden, einschließlich:
url('path/to/route') ( URL::to() )secure_url('path/to/route')route('routename') oder route('routename', 'param') oder route('routename', ['param1', 'param2']) ( URL::route() )action('controller@action') ( URL::action() )'http://www.example.com/' ).Dieses Beispiel würde wie folgt gerendert werden:
{{ Breadcrumbs :: render ( ' home ' ) } }Und das Ergebnis ist diese Ausgabe:
Heim
Dies ist eine weitere statische Seite, jedoch mit einem übergeordneten Link davor:
<?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 ' ));
}); Es funktioniert, indem es den Abschluss für den oben definierten home -Breadcrumb aufruft.
Es würde so gerendert werden:
{{ Breadcrumbs :: render ( ' blog ' ) } }Und das Ergebnis ist diese Ausgabe:
Startseite / Blog
Beachten Sie, dass die Standardvorlagen keinen Link für den letzten Breadcrumb (den für die aktuelle Seite) erstellen, selbst wenn eine URL angegeben ist. Sie können dies überschreiben, indem Sie Ihre eigene Vorlage erstellen – weitere Einzelheiten finden Sie unter „Benutzerdefinierte Vorlagen“.
Dies ist eine dynamisch generierte Seite, die aus der Datenbank abgerufen wird:
<?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 ));
}); Das $post Objekt (wahrscheinlich ein Eloquent Model, könnte aber alles sein) würde aus der Ansicht übergeben:
{{ Breadcrumbs :: render ( ' post ' , $post ) } }Es ergibt sich folgende Ausgabe:
Startseite / Blog / Beitragstitel
Sie können Methodenaufrufe auch mit $trail verketten. Wenn Sie PHP 7.4 und höher mit Pfeilfunktionsunterstützung verwenden, bevorzugen Sie möglicherweise die folgende, prägnantere Syntax:
Breadcrumbs:: for (
' post ' ,
fn ( BreadcrumbTrail $ trail , Post $ post ) => $ trail
-> parent ( ' blog ' )
-> push ( $ post -> title , route ( ' post ' , $ post ))
); Wenn Sie schließlich verschachtelte Kategorien oder andere spezielle Anforderungen haben, können Sie $trail->push() mehrmals aufrufen:
<?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 ));
});Alternativ könnten Sie eine rekursive Funktion wie diese erstellen:
<?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 ));
});Beides würde so gerendert werden:
{{ Breadcrumbs :: render ( ' category ' , $category ) } }Und das ergibt Folgendes:
Startseite / Blog / Großelternkategorie / Übergeordnete Kategorie / Kategorietitel
Um den HTML-Code anzupassen, erstellen Sie Ihre eigene Ansichtsdatei ähnlich der folgenden:
{{-- 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 >
@endunlessWenn Sie eine vorhandene integrierte Vorlage bearbeiten möchten, führen Sie den folgenden Befehl aus:
php artisan vendor:publish --tag=breadcrumbs-views Dadurch werden alle integrierten Vorlagen in das Verzeichnis resources/views/vendor/breadcrumbs/ in Ihrem Projekt kopiert, sodass Sie Änderungen direkt vornehmen können.
Die Ansicht erhält eine Sammlung namens $breadcrumbs .
Jeder Breadcrumb ist ein Objekt mit den folgenden Schlüsseln:
title – Der Breadcrumb-Titelurl – Die Breadcrumb-URL oder null , wenn keine angegeben wurde$data (siehe Benutzerdefinierte Daten)Aktualisieren Sie dann Ihre Konfigurationsdatei mit dem Namen der benutzerdefinierten Ansicht:
// config/breadcrumbs.php
' view ' => ' partials.breadcrumbs ' , // --> resources/views/partials/breadcrumbs.blade.php Alternativ können Sie die benutzerdefinierte Ansicht überspringen und Breadcrumbs::generate() aufrufen, um die Breadcrumbs-Sammlung direkt abzurufen:
@foreach ( Breadcrumbs :: generate ( ' post ' , $post ) as $breadcrumb )
{{-- ... --}}
@endforeach Rufen Sie Breadcrumbs::render() in der Ansicht für jede Seite auf und übergeben Sie ihm den Namen des zu verwendenden Breadcrumbs sowie alle zusätzlichen Parameter.
{{ Breadcrumbs :: render ( ' home ' ) } }Oder mit einem Parameter:
{{ Breadcrumbs :: render ( ' category ' , $category ) } } Um Breadcrumbs als strukturierte JSON-LD-Daten zu rendern (normalerweise aus SEO-Gründen), verwenden Sie Breadcrumbs::view() um zusätzlich zur normalen Vorlage die breadcrumbs::json-ld -Vorlage zu rendern. Zum Beispiel:
< html >
< head >
...
{{ Breadcrumbs :: view ( ' breadcrumbs::json-ld ' , ' category ' , $category ) } }
...
</ head >
< body >
...
{{ Breadcrumbs :: render ( ' category ' , $category ) } }
...
</ body >
</ html > (Hinweis: Wenn Sie Laravel Page Speed verwenden, müssen Sie möglicherweise die TrimUrls Middleware deaktivieren.)
Um ein Bild anzugeben, fügen Sie es dem Parameter $data in push() hinzu:
<?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 )]);
});(Wenn Sie lieber Microdata oder RDFa verwenden möchten, müssen Sie eine benutzerdefinierte Vorlage erstellen.)
Im normalen Gebrauch müssen Sie Breadcrumbs::render($name, $params...) aufrufen, um die Breadcrumbs auf jeder Seite zu rendern. Wenn Sie möchten, können Sie Ihre Breadcrumbs genauso benennen wie Ihre Routen und so diese Duplizierung vermeiden.
Stellen Sie sicher, dass jede Ihrer Routen einen Namen hat.
<?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 ' );Weitere Einzelheiten finden Sie unter „Benannte Routen“ in der Laravel-Dokumentation.
Erstellen Sie für jede Route einen Breadcrumb mit demselben Namen und denselben Parametern. Zum Beispiel:
<?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 ));
}); Um Breadcrumbs zu einer benutzerdefinierten „404 Not Found“-Seite hinzuzufügen, verwenden Sie den Namen errors.404 :
Breadcrumbs:: for ( ' errors.404 ' , function ( BreadcrumbTrail $ trail ) {
$ trail -> parent ( ' home ' );
$ trail -> push ( ' Page Not Found ' );
}); Rufen Sie Breadcrumbs::render() ohne Parameter in Ihrer Layoutdatei auf:
{{-- resources/views/app.blade.php --}}
{{ Breadcrumbs :: render () } } Dadurch werden automatisch Breadcrumbs ausgegeben, die der aktuellen Route entsprechen. Dasselbe gilt auch für Breadcrumbs::generate() und Breadcrumbs::view() :
Wir lösen eine InvalidBreadcrumbException aus, wenn der Breadcrumb nicht vorhanden ist, um Sie daran zu erinnern, einen zu erstellen. Um dies zu deaktivieren (z. B. wenn Sie einige Seiten ohne Breadcrumbs haben), initialisieren Sie zunächst die Konfigurationsdatei, falls Sie dies noch nicht getan haben:
php artisan vendor:publish --tag=breadcrumbs-configÖffnen Sie dann die neu erstellte Datei und legen Sie diesen Wert fest:
// config/breadcrumbs.php
' missing-route-bound-breadcrumb-exception ' => false, Um zu verhindern, dass eine UnnamedRouteException ausgelöst wird, wenn die aktuelle Route keinen Namen hat, legen Sie diesen Wert fest:
// config/breadcrumbs.php
' unnamed-route-exception ' => false,Laravel Breadcrumbs verwendet die gleiche Modellbindung wie der Controller. Zum Beispiel:
<?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 ));
});Dadurch wird Ihr Code weniger ausführlich und effizienter, da der Beitrag nur einmal aus der Datenbank geladen wird.
Weitere Einzelheiten finden Sie unter Routenmodellbindung in der Laravel-Dokumentation.
Laravel erstellt automatisch Routennamen für einfallsreiche Controller, z. B. photo.index , die Sie beim Definieren Ihrer Breadcrumbs verwenden können. Zum Beispiel:
<?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 ));
});Weitere Einzelheiten finden Sie unter „Ressourcencontroller“ in der Laravel-Dokumentation.
(Verwandte FAQ: Warum gibt es keine Breadcrumbs::resource()-Methode?.)
Der zweite Parameter von push() ist optional. Wenn Sie also einen Breadcrumb ohne URL wünschen, können Sie Folgendes tun:
$ trail -> push ( ' Sample ' ); In diesem Fall ist $breadcrumb->url null .
Die bereitgestellten Standard-Bootstrap-Vorlagen rendern dies mit der CSS-Klasse „aktiv“, genau wie beim letzten Breadcrumb, da sie ansonsten standardmäßig schwarzen und nicht grauen Text verwenden, was nicht richtig aussieht.
Die push() Methode akzeptiert einen optionalen dritten Parameter, $data – ein Array beliebiger assoziativer Datenarrays, die an den Breadcrumb übergeben werden, den Sie in Ihrer benutzerdefinierten Vorlage verwenden können.
Wenn Sie beispielsweise möchten, dass jeder Brotkrümel ein Symbol hat, können Sie Folgendes tun:
$ trail -> push ( ' Home ' , ' / ' , [ ' icon ' => ' home.png ' ]); Die Einträge des $data Arrays werden als Eigenschaften in den Breadcrumb eingefügt.
< li >
< a href = " {{ $breadcrumb -> url } } " >
< img src = " /images/icons/ {{ $breadcrumb -> icon } } " >
{{ $breadcrumb -> title } }
</ a >
</ li > Hinweis: Verwenden Sie nicht die Schlüssel title oder url , da diese überschrieben werden.
Sie können „Vorher“- und „Nachher“-Rückrufe registrieren, um am Anfang/Ende des Trails Breadcrumbs hinzuzufügen. Um beispielsweise automatisch die aktuelle Seitenzahl am Ende hinzuzufügen:
<?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 }" );
}
}); Um den letzten Breadcrumb für die aktuelle Seite abzurufen, verwenden Sie Breadcrumb::current() . So könnten Sie beispielsweise den aktuellen Seitentitel ausgeben:
< title > {{ ( $breadcrumb = Breadcrumbs :: current ()) ? $breadcrumb -> title : ' Fallback Title ' } } </ title > Um einen Breadcrumb zu ignorieren, fügen Sie 'current' => false zum Parameter $data in push() hinzu. Dies kann nützlich sein, um Paginierungs-Breadcrumbs zu ignorieren:
<?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 > Für eine erweiterte Filterung verwenden Sie stattdessen Breadcrumbs::generate() und die Methoden der Laravel-Collection-Klasse:
<?php
use Diglactic Breadcrumbs Breadcrumbs ;
$ current = Breadcrumbs:: generate ()-> where ( ' current ' , ' !== ' , false )-> last (); Sie können Breadcrumbs::view() anstelle von Breadcrumbs::render() verwenden, um eine andere Vorlage als die Standardvorlage zu rendern:
{{ Breadcrumbs :: view ( ' partials.breadcrumbs2 ' , ' category ' , $category ) } } Oder Sie können die Konfigurationseinstellung überschreiben, um alle zukünftigen render() -Aufrufe zu beeinflussen:
<?php
use Illuminate Support Facades Config ;
Config:: set ( ' breadcrumbs.view ' , ' partials.breadcrumbs2 ' ); {{ Breadcrumbs :: render ( ' category ' , $category ) } } Oder Sie können Breadcrumbs::generate() aufrufen, um die Breadcrumbs-Sammlung abzurufen und die Ansicht manuell zu laden:
@include ( ' partials.breadcrumbs2 ' , [ ' breadcrumbs ' => Breadcrumbs :: generate ( ' category ' , $category )] ) Wenn Sie Breadcrumbs::render() oder Breadcrumbs::generate() ohne Parameter aufrufen, werden standardmäßig der aktuelle Routenname und die Parameter verwendet (wie von Route::current() -Methode von Laravel zurückgegeben).
Sie können dies überschreiben, indem Sie Breadcrumbs::setCurrentRoute($name, $param1, $param2...) aufrufen.
Um zu überprüfen, ob ein Breadcrumb mit einem bestimmten Namen existiert, rufen Sie Breadcrumbs::exists('name') , was einen booleschen Wert zurückgibt.
Wenn Sie routes/breadcrumbs.php nicht verwenden möchten, können Sie dies in der Konfigurationsdatei ändern. Initialisieren Sie zunächst die Konfigurationsdatei, falls Sie dies noch nicht getan haben:
php artisan vendor:publish --tag=breadcrumbs-configAktualisieren Sie diese Zeile:
// config/breadcrumbs.php
' files ' => base_path ( ' routes/breadcrumbs.php ' ),Es kann wie oben ein absoluter Pfad oder ein Array sein:
' files ' => [
base_path ( ' breadcrumbs/admin.php ' ),
base_path ( ' breadcrumbs/frontend.php ' ),
], Sie können also glob() verwenden, um Dateien mithilfe eines Platzhalters automatisch zu finden:
' files ' => glob ( base_path ( ' breadcrumbs/*.php ' )), Oder geben Sie ein leeres Array [] zurück, um das Laden zu deaktivieren.
Wenn Sie Ihr eigenes Paket erstellen, laden Sie einfach Ihre Breadcrumbs-Datei über boot() -Methode Ihres Dienstanbieters:
use Illuminate Support ServiceProvider ;
class MyServiceProvider extends ServiceProvider
{
public function boot (): void
{
if ( class_exists ( ' Breadcrumbs ' )) {
require __DIR__ . ' /breadcrumbs.php ' ;
}
}
} Wenn Sie möchten, können Sie die Abhängigkeitsinjektion verwenden, um auf die Manager Instanz zuzugreifen, anstatt die Breadcrumbs:: -Fassade zu verwenden:
<?php
use Diglactic Breadcrumbs Manager ;
use Illuminate Support ServiceProvider ;
class MyServiceProvider extends ServiceProvider
{
public function boot ( Manager $ breadcrumbs ): void
{
$ breadcrumbs -> for (...);
}
} Die Breadcrumbs- Manager Klasse ist makrofähig, sodass Sie Ihre eigenen Methoden hinzufügen können. Zum Beispiel:
<?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 > Für erweiterte Anpassungen können Sie eine Unterklasse BreadcrumbsManager und/oder BreadcrumbsGenerator erstellen und dann die Konfigurationsdatei mit dem neuen Klassennamen aktualisieren:
// breadcrumbs/config.php
' manager-class ' => Diglactic Breadcrumbs Manager::class,
' generator-class ' => Diglactic Breadcrumbs Generator::class,Hinweis: Die Konfigurationssyntax kann sich zwischen den Versionen ändern.
Breadcrumbs::resource() -Methode? Einige Leute haben vorgeschlagen, Breadcrumbs::resource() passend zu Route::resource() hinzuzufügen, aber niemand hat eine gute Implementierung gefunden, die a) flexibel genug ist, um mit Übersetzungen, verschachtelten Ressourcen usw. umzugehen, und b ) ist daher nicht übermäßig komplex.
Sie können jederzeit Ihre eigenen mit Breadcrumbs::macro() erstellen. Hier ist ein guter Ausgangspunkt:
<?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 ' ); Beachten Sie, dass es hier nicht um Übersetzungen oder verschachtelte Ressourcen geht und dass davon ausgegangen wird, dass alle Modelle ein title haben (was Benutzer wahrscheinlich nicht haben). Passen Sie es an, wie Sie es für richtig halten.
composer update diglactic/laravel-breadcrumbs auszuführen, um ein Upgrade durchzuführen.php artisan package:discover auszuführen, um sicherzustellen, dass der Dienstanbieter von Laravel erkannt wird. routes/breadcrumbs.php “).dd(__FILE__) in die Datei einzufügen, um sicherzustellen, dass sie geladen wird.dd($files) in ServiceProvider::registerBreadcrumbs() einzufügen, um zu überprüfen, ob der Pfad korrekt ist.php artisan config:clear (oder löschen Sie manuell bootstrap/cache/config.php ) oder aktualisieren Sie den Pfad in config/breadcrumbs.php .missing-route-bound-breadcrumb-exception in der Konfigurationsdatei auf false um die Prüfung zu deaktivieren (Sie werden jedoch nicht gewarnt, wenn Sie Seiten verpassen). php artisan config:clear (oder löschen Sie manuell bootstrap/cache/config.php ) oder aktualisieren Sie den Pfad in config/breadcrumbs.php . {{ Breadcrumbs::render() }} oder {{ Breadcrumbs::view() }} verwenden, nicht @include() . Dokumentation: Wenn Sie der Meinung sind, dass die Dokumentation in irgendeiner Weise verbessert werden kann, bearbeiten Sie bitte diese Datei und stellen Sie eine Pull-Anfrage.
Fehlerbehebungen: Bitte beheben Sie das Problem und öffnen Sie eine Pull-Anfrage. (Ausführlichere Anweisungen finden Sie unten.) Bonuspunkte, wenn Sie einen Komponententest hinzufügen, um sicherzustellen, dass so etwas nicht noch einmal passiert!
Neue Funktionen: Es werden nur Funktionen mit einem klaren Anwendungsfall und einer durchdachten API akzeptiert. Sie müssen dokumentiert werden und Unit-Tests beinhalten. Machen Sie im Zweifelsfall einen Proof-of-Concept (entweder Code oder Dokumentation) und öffnen Sie eine Pull-Anfrage, um die Details zu besprechen. (Tipp: Wenn Sie eine Funktion wünschen, die zu spezifisch ist, um standardmäßig enthalten zu sein, finden Sie unter Makros oder Erweiterte Verwendung Möglichkeiten, sie hinzuzufügen.)
Der einfachste Weg, an Laravel Breadcrumbs zu arbeiten, besteht darin, Composer mit dem Flag --prefer-source anzuweisen, es aus dem Quellcode (Git) zu installieren:
rm -rf vendor/diglactic/laravel-breadcrumbs
composer install --prefer-sourceDann checken Sie den Hauptzweig aus und erstellen Sie Ihren eigenen lokalen Zweig, an dem Sie arbeiten können:
cd vendor/diglactic/laravel-breadcrumbs
git checkout -t origin/main
git checkout -b YOUR_BRANCHNehmen Sie nun Ihre Änderungen vor, einschließlich Unit-Tests und Dokumentation (falls zutreffend). Führen Sie die Unit-Tests durch, um sicherzustellen, dass noch alles funktioniert:
vendor/bin/phpunitAnschließend übernehmen Sie die Änderungen. Forken Sie das Repository auf GitHub, falls Sie dies noch nicht getan haben, und übertragen Sie Ihre Änderungen per Push:
git remote add YOUR_USERNAME [email protected]:YOUR_USERNAME/laravel-breadcrumbs.git
git push -u YOUR_USERNAME YOUR_BRANCHNavigieren Sie abschließend zum Repository auf GitHub und erstellen Sie eine Pull-Anfrage.
Um Ihren eigenen Fork in einem Projekt zu verwenden, aktualisieren Sie die composer.json in Ihrem Hauptprojekt wie folgt:
{
// ADD THIS:
"repositories" : [
{
"type" : "vcs" ,
"url" : "https://github.com/YOUR_USERNAME/laravel-breadcrumbs.git"
}
] ,
"require" : {
// UPDATE THIS:
"diglactic/laravel-breadcrumbs" : "dev-YOUR_BRANCH"
}
} Ersetzen Sie YOUR_USERNAME durch Ihren GitHub-Benutzernamen und YOUR_BRANCH durch den Branch-Namen (z. B. develop ). Dadurch wird Composer angewiesen, Ihr Repository anstelle des Standard-Repositorys zu verwenden.
So führen Sie die Unit-Tests aus:
vendor/bin/phpunitSo führen Sie die Komponententests aus und erstellen Snapshots neu:
vendor/bin/phpunit -d --update-snapshotsSo überprüfen Sie die Codeabdeckung:
vendor/bin/phpunit --coverage-html test-coverage Öffnen Sie dann test-coverage/index.html um die Ergebnisse anzuzeigen. Beachten Sie die Randfälle in PHPUnit, die dazu führen können, dass es nicht ganz genau ist.
Die folgenden Dateien müssen aktualisiert werden, um Tests mit einer neuen Laravel-Version durchzuführen:
composer.json
laravel/framework (Laravel-Versionen)php (mindeste PHP-Version) tests.yml
jobs.phpunit.strategy.matrix.laravel (Laravel-Versionen)jobs.phpunit.strategy.matrix.php (PHP-Versionen)jobs.phpunit.strategy.matrix.exclude (Nicht unterstützte Kombinationen)Und bei Bedarf die folgende Dokumentation:
README.md
UPGRADE.md
Laravel Breadcrumbs ist eine Open-Source-Software, die unter der MIT-Lizenz lizenziert ist.