Bundel ini menyediakan cara untuk membuat remah roti "dinamis" dalam aplikasi simfony Anda.
Komposer adalah satu -satunya metode instalasi yang didukung. Jalankan berikut untuk menginstal versi terbaru dari Packagist:
composer require slope-it/breadcrumb-bundle
Atau, jika Anda lebih suka, Anda dapat memerlukan versi apa pun di composer.json
Anda:
{
"require" : {
"slope-it/breadcrumb-bundle" : " * "
}
}
Setelah diinstal, muat bundel di kelas kernel Anda:
// ...
class AppKernel extends Kernel
{
public function registerBundles ()
{
$ bundles = [
// ...
new SlopeIt BreadcrumbBundle SlopeItBreadcrumbBundle (),
];
// ...
}
// ...
}
Ada dua cara untuk membuat remah roti: melalui kode (1) atau melalui atribut (2).
Via Code : Anda dapat menyuntikkan pembangun remah roti di pengontrol Anda dan menambahkan item remah roti:
<?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 Atribut : Cukup gunakan atribut #[Breadcrumb]
di tingkat kelas dan/atau metode. Mereka akan digabungkan (kelas didahulukan).
Catatan: Atribut dapat mengambil satu item tunggal (dalam contoh yang dilakukan di level kelas) atau beberapa item (dalam contoh, di level metode).
<?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 ()
{
// ...
}
}
Langkah terakhir adalah menggunakan fungsi ranting berikut di mana pun Anda ingin remah roti dicetak di template Anda:
{{ slope_it_breadcrumb() }}
Terlepas dari cara Anda dulu membuat remah roti, hasilnya akan seperti:
Home > Value of entity property > Cool stuff
Di mana dua item pertama adalah jangkar dan yang terakhir hanya teks.
Selain itu, jika Anda perlu tahu apakah remah roti memiliki barang atau tidak, Anda dapat menggunakan:
{{ slope_it_is_breadcrumb_empty() }}
Di bawah kap, ini adalah logika bisnis yang terlibat, untuk setiap item, dalam generasi remah roti:
label
akan menjadi teks yang dicetak. Itu bisa jadi:$
. Dalam hal ini, label remah roti akan diekstraksi dari variabel yang diteruskan ke templat. Jalur properti dapat digunakan, misalnya: $variable.property.path
route
akan digunakan untuk menghasilkan URL untuk jangkar item (jika disediakan). Jika tidak disediakan, item tidak akan diklik.params
akan digunakan untuk menghasilkan URL yang terkait dengan rute yang disediakan. Ini adalah array asosiatif di mana setiap nilai bisa:$variable.property.path
. Perawatannya persis sama dengan "label". Ini berguna untuk mengambil URL params secara dinamis (EG Entity ID) mulai dari variabel tampilan.translationDomain
akan digunakan untuk menerjemahkan kunci yang disediakan dalam atribut label
. Jika null
, domain terjemahan default akan digunakan. Berikan false
jika Anda memasukkan string yang tidak dapat diterjemahkan ke dalam label
dan Anda tidak ingin menggunakannya sebagai kunci terjemahan.Catatan: Anda tidak perlu melewati semua parameter rute yang diperlukan dengan rute, selama parameter rute ini sudah ada di URL untuk permintaan saat ini . Dengan kata lain, jika struktur hierarki remah roti Anda entah bagaimana "cocok dengan" struktur URL Anda.
Contoh: Misalkan Anda memiliki rute berikut, dengan parameter dan URL yang dihasilkan:
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
Jika Anda berada dalam aksi untuk Rute children_edit
dan Anda ingin menghasilkan remah roti termasuk semua langkah di atas, Anda akan dapat menggunakan anotasi berikut:
<?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 )
{
// ...
}
Perhatikan bagaimana Anda tidak harus memberikan parameter rute (karena permintaan saat ini sudah memiliki semuanya). Ini akan bekerja sama jika Anda membangunnya melalui kode sebagai gantinya.
Template default bundel untuk rendering remah roti dapat ditimpa dengan menambahkan baris berikut ke config.yml
aplikasi Anda:
slope_it_breadcrumb :
template : YourBundle::breadcrumb.html.twig
Jika Anda bermaksud melakukan ini, disarankan untuk menyalin Resources/views/breadcrumb.html.twig
ke bundel Anda dan menyesuaikannya. Namun, dalam templat Anda, Anda hanya harus mengulangi variabel items
untuk membuat remah roti khusus Anda.
Dalam salah satu dari keadaan ini, silakan garukan repo ini dan buat permintaan tarik. Kami sangat senang menerima kontribusi!