Cara sederhana bergaya Laravel untuk membuat remah roti.
Proyek ini adalah cabang resmi dari Laravel Breadcrumbs yang sangat orisinal dan fantastis oleh Dave James Miller dan tidak akan mungkin terwujud tanpa sekelompok kontributor hebat di hari pertama. Terima kasih semuanya!
Laravel | Remah Roti 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 |
Untuk versi Laravel yang lebih lama, referensikan proyek GitHub asli. Semua tag telah dicerminkan jika Anda lebih suka mereferensikan paket ini, namun tidak akan memberikan perbedaan fungsional.
composer require diglactic/laravel-breadcrumbs
Buat file bernama routes/breadcrumbs.php
yang terlihat seperti ini:
<?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 ));
});
Lihat bagian Mendefinisikan Breadcrumbs untuk lebih jelasnya.
Secara default, daftar breadcrumb Bootstrap 5 akan dirender. Untuk mengubahnya, inisialisasi file konfigurasi dengan menjalankan perintah ini:
php artisan vendor:publish --tag=breadcrumbs-config
Kemudian, buka config/breadcrumbs.php
dan edit baris ini:
// config/breadcrumbs.php
' view ' => ' breadcrumbs::bootstrap5 ' ,
Nilai yang mungkin adalah:
breadcrumbs::bootstrap5
– Bootstrap 5breadcrumbs::bootstrap4
– Bootstrap 4breadcrumbs::bulma
– Bulmabreadcrumbs::foundation6
– Fondasi 6breadcrumbs::json-ld
– Data Terstruktur JSON-LDbreadcrumbs::materialize
– Terwujudbreadcrumbs::tailwind
– CSS Tailwindbreadcrumbs::uikit
– UIkitpartials.breadcrumbs
Lihat bagian Templat Khusus untuk lebih jelasnya.
Anda juga dapat menentukan tampilan kustom saat runtime.
Panggil Breadcrumbs::render()
dalam tampilan untuk setiap halaman, berikan nama breadcrumb yang akan digunakan dan parameter tambahan apa pun:
{{-- resources/views/home.blade.php --}}
{{ Breadcrumbs :: render ( ' home ' ) } }
{{-- resources/views/categories/show.blade.php --}}
{{ Breadcrumbs :: render ( ' category ' , $category ) } }
Lihat bagian Mengeluarkan Breadcrumbs untuk opsi output lainnya, dan lihat Route-Bound Breadcrumbs untuk mengetahui cara menghubungkan nama breadcrumb ke nama rute secara otomatis.
Breadcrumbs biasanya sesuai dengan tindakan atau jenis halaman. Untuk setiap runut tautan, Anda menentukan nama, judul runut tautan, dan URL untuk ditautkan. Karena ini cenderung berubah secara dinamis, Anda melakukan ini dalam penutupan, dan meneruskan variabel apa pun yang Anda perlukan ke dalam penutupan.
Contoh-contoh berikut seharusnya memperjelas:
Breadcrumb yang paling sederhana mungkin adalah beranda Anda, yang akan terlihat seperti ini:
<?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 ' ));
});
Untuk menghasilkan URL, Anda dapat menggunakan salah satu metode pembuatan URL Laravel standar, termasuk:
url('path/to/route')
( URL::to()
)secure_url('path/to/route')
route('routename')
atau route('routename', 'param')
atau route('routename', ['param1', 'param2'])
( URL::route()
)action('controller@action')
( URL::action()
)'http://www.example.com/'
)Contoh ini akan diterjemahkan seperti ini:
{{ Breadcrumbs :: render ( ' home ' ) } }
Dan menghasilkan output ini:
Rumah
Ini adalah halaman statis lainnya, tetapi dengan link induk sebelumnya:
<?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 ' ));
});
Ia bekerja dengan memanggil penutupan untuk runut tautan home
yang ditentukan di atas.
Ini akan diterjemahkan seperti ini:
{{ Breadcrumbs :: render ( ' blog ' ) } }
Dan menghasilkan output ini:
Beranda / Blog
Perhatikan bahwa templat default tidak membuat tautan untuk remah roti terakhir (yang untuk laman saat ini), bahkan ketika URL ditentukan. Anda dapat menggantinya dengan membuat templat Anda sendiri – lihat Templat Khusus untuk lebih jelasnya.
Ini adalah halaman yang dihasilkan secara dinamis yang diambil dari database:
<?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 ));
});
Objek $post
(mungkin Model Eloquent, tapi bisa apa saja) akan diteruskan dari tampilan:
{{ Breadcrumbs :: render ( ' post ' , $post ) } }
Ini menghasilkan keluaran ini:
Beranda / Blog / Judul Postingan
Anda juga dapat merangkai panggilan metode ke $trail
. Jika Anda menggunakan PHP 7.4 dan yang lebih baru dengan dukungan fungsi panah, Anda mungkin lebih memilih sintaksis berikut yang lebih ringkas:
Breadcrumbs:: for (
' post ' ,
fn ( BreadcrumbTrail $ trail , Post $ post ) => $ trail
-> parent ( ' blog ' )
-> push ( $ post -> title , route ( ' post ' , $ post ))
);
Terakhir, jika Anda memiliki kategori bertingkat atau persyaratan khusus lainnya, Anda dapat memanggil $trail->push()
beberapa kali:
<?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 ));
});
Alternatifnya, Anda bisa membuat fungsi rekursif seperti ini:
<?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 ));
});
Keduanya akan ditampilkan seperti ini:
{{ Breadcrumbs :: render ( ' category ' , $category ) } }
Dan hasilnya adalah ini:
Beranda / Blog / Kategori Kakek-Nenek / Kategori Induk / Judul Kategori
Untuk menyesuaikan HTML, buat file tampilan Anda sendiri seperti berikut:
{{-- 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
Jika Anda ingin menggunakan templat bawaan yang sudah ada, jalankan perintah berikut:
php artisan vendor:publish --tag=breadcrumbs-views
Ini akan menyalin semua templat bawaan ke direktori resources/views/vendor/breadcrumbs/
di proyek Anda, sehingga Anda dapat melakukan pengeditan secara langsung.
Tampilan akan menerima Koleksi yang disebut $breadcrumbs
.
Setiap remah roti adalah objek dengan kunci berikut:
title
– Judul remah rotiurl
– URL runut tautan, atau null
jika tidak ada yang diberikan$data
(lihat Data khusus)Kemudian, perbarui file konfigurasi Anda dengan nama tampilan khusus:
// config/breadcrumbs.php
' view ' => ' partials.breadcrumbs ' , // --> resources/views/partials/breadcrumbs.blade.php
Alternatifnya, Anda dapat melewati tampilan kustom dan memanggil Breadcrumbs::generate()
untuk mendapatkan koleksi breadcrumbs secara langsung:
@foreach ( Breadcrumbs :: generate ( ' post ' , $post ) as $breadcrumb )
{{-- ... --}}
@endforeach
Panggil Breadcrumbs::render()
dalam tampilan untuk setiap halaman, berikan nama remah roti yang akan digunakan dan parameter tambahan apa pun.
{{ Breadcrumbs :: render ( ' home ' ) } }
Atau dengan parameter:
{{ Breadcrumbs :: render ( ' category ' , $category ) } }
Untuk merender remah roti sebagai data terstruktur JSON-LD (biasanya karena alasan SEO), gunakan Breadcrumbs::view()
untuk merender templat breadcrumbs::json-ld
selain templat normal. Misalnya:
< html >
< head >
...
{{ Breadcrumbs :: view ( ' breadcrumbs::json-ld ' , ' category ' , $category ) } }
...
</ head >
< body >
...
{{ Breadcrumbs :: render ( ' category ' , $category ) } }
...
</ body >
</ html >
(Catatan: Jika Anda menggunakan Laravel Page Speed, Anda mungkin perlu menonaktifkan middleware TrimUrls
.)
Untuk menentukan gambar, tambahkan ke parameter $data
di 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 )]);
});
(Jika Anda lebih suka menggunakan Microdata atau RDFa, Anda perlu membuat templat khusus.)
Dalam penggunaan normal Anda harus memanggil Breadcrumbs::render($name, $params...)
untuk merender remah roti di setiap halaman. Jika mau, Anda dapat memberi nama remah roti yang sama dengan rute Anda dan menghindari duplikasi ini.
Pastikan setiap rute Anda memiliki nama.
<?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 ' );
Untuk detail lebih lanjut, lihat Rute Bernama dalam dokumentasi Laravel.
Untuk setiap rute, buat remah roti dengan nama dan parameter yang sama. Misalnya:
<?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 ));
});
Untuk menambahkan remah roti ke halaman 404 Tidak Ditemukan khusus, gunakan nama errors.404
:
Breadcrumbs:: for ( ' errors.404 ' , function ( BreadcrumbTrail $ trail ) {
$ trail -> parent ( ' home ' );
$ trail -> push ( ' Page Not Found ' );
});
Panggil Breadcrumbs::render()
tanpa parameter di file tata letak Anda:
{{-- resources/views/app.blade.php --}}
{{ Breadcrumbs :: render () } }
Ini secara otomatis akan menampilkan remah roti yang sesuai dengan rute saat ini. Hal yang sama berlaku untuk Breadcrumbs::generate()
dan Breadcrumbs::view()
:
Kami akan menampilkan InvalidBreadcrumbException
jika remah roti tidak ada, untuk mengingatkan Anda agar membuatnya. Untuk menonaktifkan ini (misalnya jika Anda memiliki beberapa halaman tanpa remah roti), pertama-tama inisialisasi file konfigurasi, jika Anda belum melakukannya:
php artisan vendor:publish --tag=breadcrumbs-config
Kemudian buka file yang baru dibuat dan atur nilai ini:
// config/breadcrumbs.php
' missing-route-bound-breadcrumb-exception ' => false,
Demikian pula, untuk mencegahnya memunculkan UnnamedRouteException
jika rute saat ini tidak memiliki nama, tetapkan nilai ini:
// config/breadcrumbs.php
' unnamed-route-exception ' => false,
Laravel Breadcrumbs menggunakan pengikatan model yang sama dengan pengontrol. Misalnya:
<?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 ));
});
Hal ini membuat kode Anda tidak terlalu bertele-tele dan lebih efisien dengan hanya memuat postingan dari database satu kali.
Untuk lebih jelasnya lihat Route Model Binding dalam dokumentasi Laravel.
Laravel secara otomatis membuat nama rute untuk pengontrol yang cerdas, misalnya photo.index
, yang dapat Anda gunakan saat mendefinisikan remah roti Anda. Misalnya:
<?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 ));
});
Untuk detail lebih lanjut lihat Pengontrol Sumber Daya dalam dokumentasi Laravel.
(FAQ Terkait: Mengapa tidak ada metode Breadcrumbs::resource()?.)
Parameter kedua untuk push()
bersifat opsional, jadi jika Anda menginginkan remah roti tanpa URL, Anda dapat melakukan:
$ trail -> push ( ' Sample ' );
Dalam hal ini, $breadcrumb->url
akan menjadi null
.
Templat Bootstrap default yang disediakan membuat ini dengan kelas CSS "aktif", sama dengan remah roti terakhir, karena jika tidak, defaultnya adalah teks hitam bukan abu-abu yang sepertinya tidak benar.
Metode push()
menerima parameter ketiga opsional, $data
– array data asosiatif arbitrer yang akan diteruskan ke remah roti, yang dapat Anda gunakan dalam templat khusus Anda.
Misalnya, jika Anda ingin setiap remah roti memiliki ikon, Anda dapat melakukan:
$ trail -> push ( ' Home ' , ' / ' , [ ' icon ' => ' home.png ' ]);
Entri array $data
akan digabungkan ke dalam remah roti sebagai properti.
< li >
< a href = " {{ $breadcrumb -> url } } " >
< img src = " /images/icons/ {{ $breadcrumb -> icon } } " >
{{ $breadcrumb -> title } }
</ a >
</ li >
Catatan: jangan gunakan kunci title
atau url
, karena akan ditimpa.
Anda dapat mendaftarkan callback "sebelum" dan "sesudah" untuk menambahkan remah roti di awal/akhir jejak. Misalnya, untuk menambahkan nomor halaman saat ini secara otomatis di bagian akhir:
<?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 }" );
}
});
Untuk mendapatkan remah roti terakhir untuk halaman saat ini, gunakan Breadcrumb::current()
. Misalnya, Anda dapat menggunakan ini untuk menampilkan judul halaman saat ini:
< title > {{ ( $breadcrumb = Breadcrumbs :: current ()) ? $breadcrumb -> title : ' Fallback Title ' } } </ title >
Untuk mengabaikan runut tautan, tambahkan 'current' => false
ke parameter $data
di push()
. Ini berguna untuk mengabaikan remah roti penomoran halaman:
<?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 >
Untuk pemfilteran lebih lanjut, gunakan metode kelas Breadcrumbs::generate()
dan Laravel's Collection:
<?php
use Diglactic Breadcrumbs Breadcrumbs ;
$ current = Breadcrumbs:: generate ()-> where ( ' current ' , ' !== ' , false )-> last ();
Anda dapat menggunakan Breadcrumbs::view()
sebagai pengganti Breadcrumbs::render()
untuk merender templat selain yang default:
{{ Breadcrumbs :: view ( ' partials.breadcrumbs2 ' , ' category ' , $category ) } }
Atau Anda dapat mengganti pengaturan konfigurasi untuk memengaruhi semua panggilan render()
di masa mendatang:
<?php
use Illuminate Support Facades Config ;
Config:: set ( ' breadcrumbs.view ' , ' partials.breadcrumbs2 ' );
{{ Breadcrumbs :: render ( ' category ' , $category ) } }
Atau Anda dapat memanggil Breadcrumbs::generate()
untuk mendapatkan Koleksi breadcrumbs dan memuat tampilan secara manual:
@include ( ' partials.breadcrumbs2 ' , [ ' breadcrumbs ' => Breadcrumbs :: generate ( ' category ' , $category )] )
Jika Anda memanggil Breadcrumbs::render()
atau Breadcrumbs::generate()
tanpa parameter, nama rute dan parameter saat ini akan digunakan secara default (seperti yang dikembalikan oleh metode Route::current()
Laravel).
Anda dapat menggantinya dengan memanggil Breadcrumbs::setCurrentRoute($name, $param1, $param2...)
.
Untuk memeriksa apakah remah roti dengan nama tertentu ada, panggil Breadcrumbs::exists('name')
, yang mengembalikan boolean.
Jika Anda tidak ingin menggunakan routes/breadcrumbs.php
, Anda dapat mengubahnya di file konfigurasi. Pertama inisialisasi file konfigurasi, jika Anda belum melakukannya:
php artisan vendor:publish --tag=breadcrumbs-config
Perbarui baris ini:
// config/breadcrumbs.php
' files ' => base_path ( ' routes/breadcrumbs.php ' ),
Ini bisa berupa jalur absolut, seperti di atas, atau array:
' files ' => [
base_path ( ' breadcrumbs/admin.php ' ),
base_path ( ' breadcrumbs/frontend.php ' ),
],
Jadi Anda bisa menggunakan glob()
untuk menemukan file secara otomatis menggunakan wildcard:
' files ' => glob ( base_path ( ' breadcrumbs/*.php ' )),
Atau kembalikan array kosong []
untuk menonaktifkan pemuatan.
Jika Anda membuat paket sendiri, cukup muat file remah roti Anda dari metode boot()
penyedia layanan Anda:
use Illuminate Support ServiceProvider ;
class MyServiceProvider extends ServiceProvider
{
public function boot (): void
{
if ( class_exists ( ' Breadcrumbs ' )) {
require __DIR__ . ' /breadcrumbs.php ' ;
}
}
}
Anda dapat menggunakan injeksi ketergantungan untuk mengakses instance Manager
jika Anda mau, daripada menggunakan fasad Breadcrumbs::
<?php
use Diglactic Breadcrumbs Manager ;
use Illuminate Support ServiceProvider ;
class MyServiceProvider extends ServiceProvider
{
public function boot ( Manager $ breadcrumbs ): void
{
$ breadcrumbs -> for (...);
}
}
Kelas Breadcrumbs Manager
bersifat makro, sehingga Anda dapat menambahkan metode Anda sendiri. Misalnya:
<?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 >
Untuk penyesuaian lebih lanjut, Anda dapat membuat subkelas BreadcrumbsManager
dan/atau BreadcrumbsGenerator
, lalu memperbarui file konfigurasi dengan nama kelas baru:
// breadcrumbs/config.php
' manager-class ' => Diglactic Breadcrumbs Manager::class,
' generator-class ' => Diglactic Breadcrumbs Generator::class,
Catatan: sintaks konfigurasi dapat berubah antar rilis.
Breadcrumbs::resource()
? Beberapa orang telah menyarankan untuk menambahkan Breadcrumbs::resource()
untuk mencocokkan Route::resource()
, namun belum ada yang menghasilkan implementasi yang baik yang a) cukup fleksibel untuk menangani terjemahan, sumber daya yang disarangkan, dll., dan b ) sebagai hasilnya tidak terlalu rumit.
Anda selalu dapat membuatnya sendiri menggunakan Breadcrumbs::macro()
. Inilah titik awal yang baik:
<?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 ' );
Perhatikan bahwa ini tidak berhubungan dengan terjemahan atau sumber daya bersarang, dan ini mengasumsikan bahwa semua model memiliki atribut title
(yang mungkin tidak dimiliki pengguna). Sesuaikan sesuai keinginan Anda.
composer update diglactic/laravel-breadcrumbs
untuk mengupgrade.php artisan package:discover
untuk memastikan penyedia layanan terdeteksi oleh Laravel. routes/breadcrumbs.php
secara default).dd(__FILE__)
ke dalam file untuk memastikannya dimuat.dd($files)
di ServiceProvider::registerBreadcrumbs()
untuk memeriksa kebenaran jalurnya.php artisan config:clear
(atau hapus bootstrap/cache/config.php
secara manual) atau perbarui jalur di config/breadcrumbs.php
.missing-route-bound-breadcrumb-exception
ke false
di file konfigurasi untuk menonaktifkan pemeriksaan (tetapi Anda tidak akan diperingatkan jika ada halaman yang terlewat). php artisan config:clear
(atau hapus bootstrap/cache/config.php
secara manual) atau perbarui jalur di config/breadcrumbs.php
. {{ Breadcrumbs::render() }}
atau {{ Breadcrumbs::view() }}
, bukan @include()
. Dokumentasi: Jika menurut Anda dokumentasi dapat diperbaiki dengan cara apa pun, harap edit file ini dan buat permintaan penarikan.
Perbaikan bug: Harap perbaiki dan buka permintaan tarik. (Lihat di bawah untuk instruksi lebih rinci.) Poin bonus jika Anda menambahkan unit test untuk memastikan hal itu tidak terjadi lagi!
Fitur baru: Hanya fitur dengan kasus penggunaan yang jelas dan API yang dipertimbangkan dengan baik yang akan diterima. Mereka harus didokumentasikan dan mencakup pengujian unit. Jika ragu, buatlah bukti konsep (baik kode atau dokumentasi) dan buka pull request untuk mendiskusikan detailnya. (Kiat: Jika Anda ingin fitur yang terlalu spesifik untuk disertakan secara default, lihat Makro atau Penggunaan Lanjutan untuk mengetahui cara menambahkannya.)
Cara termudah untuk mengerjakan Laravel Breadcrumbs adalah dengan memberitahu Composer untuk menginstalnya dari sumber (Git) menggunakan flag --prefer-source
:
rm -rf vendor/diglactic/laravel-breadcrumbs
composer install --prefer-source
Kemudian periksa cabang utama dan buat cabang lokal Anda sendiri untuk dikerjakan:
cd vendor/diglactic/laravel-breadcrumbs
git checkout -t origin/main
git checkout -b YOUR_BRANCH
Sekarang buat perubahan Anda, termasuk pengujian unit dan dokumentasi (jika perlu). Jalankan pengujian unit untuk memastikan semuanya masih berfungsi:
vendor/bin/phpunit
Kemudian komit perubahannya. Cabangkan repositori di GitHub jika Anda belum melakukannya, dan dorong perubahan Anda ke dalamnya:
git remote add YOUR_USERNAME [email protected]:YOUR_USERNAME/laravel-breadcrumbs.git
git push -u YOUR_USERNAME YOUR_BRANCH
Terakhir, telusuri repositori di GitHub dan buat permintaan tarik.
Untuk menggunakan fork Anda sendiri dalam sebuah proyek, perbarui composer.json
di proyek utama Anda sebagai berikut:
{
// ADD THIS:
"repositories" : [
{
"type" : "vcs" ,
"url" : "https://github.com/YOUR_USERNAME/laravel-breadcrumbs.git"
}
] ,
"require" : {
// UPDATE THIS:
"diglactic/laravel-breadcrumbs" : "dev-YOUR_BRANCH"
}
}
Ganti YOUR_USERNAME
dengan nama pengguna GitHub Anda dan YOUR_BRANCH
dengan nama cabang (mis. develop
). Ini memberitahu Composer untuk menggunakan repositori Anda, bukan yang default.
Untuk menjalankan pengujian unit:
vendor/bin/phpunit
Untuk menjalankan pengujian unit dan membangun kembali snapshot:
vendor/bin/phpunit -d --update-snapshots
Untuk memeriksa cakupan kode:
vendor/bin/phpunit --coverage-html test-coverage
Kemudian buka test-coverage/index.html
untuk melihat hasilnya. Waspadai kasus edge di PHPUnit yang membuatnya kurang akurat.
File-file berikut perlu diperbarui untuk menjalankan pengujian terhadap versi Laravel baru:
composer.json
laravel/framework
(versi Laravel)php
(versi minimum PHP) tests.yml
jobs.phpunit.strategy.matrix.laravel
(versi Laravel)jobs.phpunit.strategy.matrix.php
(versi PHP)jobs.phpunit.strategy.matrix.exclude
(Kombinasi tidak didukung)Dan berikut dokumentasinya, bila diperlukan:
README.md
UPGRADE.md
Laravel Breadcrumbs adalah perangkat lunak sumber terbuka yang dilisensikan di bawah lisensi MIT.