ชุดนี้มีวิธีสร้าง breadcrumbs "ไดนามิก" ในแอปพลิเคชัน Symfony ของคุณ
นักแต่งเพลงเป็นวิธีการติดตั้งที่รองรับเท่านั้น รันต่อไปนี้เพื่อติดตั้งเวอร์ชันล่าสุดจาก Packagist:
composer require slope-it/breadcrumb-bundle
หรือถ้าคุณต้องการคุณสามารถต้องการเวอร์ชันใด ๆ ใน composer.json
:
{
"require" : {
"slope-it/breadcrumb-bundle" : " * "
}
}
เมื่อติดตั้งแล้วให้โหลดมัดในคลาสเคอร์เนลของคุณ:
// ...
class AppKernel extends Kernel
{
public function registerBundles ()
{
$ bundles = [
// ...
new SlopeIt BreadcrumbBundle SlopeItBreadcrumbBundle (),
];
// ...
}
// ...
}
มีสองวิธีในการสร้าง breadcrumb: ผ่านรหัส (1) หรือผ่านแอตทริบิวต์ (2)
ผ่านรหัส : คุณสามารถฉีด Breadcrumb Builder ในคอนโทรลเลอร์ของคุณและเพิ่มรายการ breadcrumb:
<?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 ' );
// ...
}
}
ผ่านแอตทริบิวต์ : เพียงใช้แอตทริบิวต์ #[Breadcrumb]
ที่ระดับคลาสและ/หรือวิธีการ พวกเขาจะถูกรวมเข้าด้วยกัน (ชั้นเรียนมาก่อน)
หมายเหตุ: แอตทริบิวต์สามารถใช้รายการเดียว (ในตัวอย่างที่ทำในระดับคลาส) หรือหลายรายการ (ในตัวอย่างที่ระดับวิธี)
<?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 ()
{
// ...
}
}
ขั้นตอนสุดท้ายคือการใช้ฟังก์ชั่นกิ่งไม้ต่อไปนี้ทุกที่ที่คุณต้องการพิมพ์ขนมปังในเทมเพลตของคุณ:
{{ slope_it_breadcrumb() }}
โดยไม่คำนึงถึงวิธีที่คุณใช้ในการสร้าง breadcrumb ผลลัพธ์จะเป็นเช่น:
Home > Value of entity property > Cool stuff
ซึ่งสองรายการแรกคือจุดยึดและอันสุดท้ายคือข้อความเท่านั้น
นอกจากนี้ในกรณีที่คุณจำเป็นต้องรู้ว่า breadcrumb มีรายการหรือไม่คุณสามารถใช้:
{{ slope_it_is_breadcrumb_empty() }}
ภายใต้ประทุนนี่คือตรรกะทางธุรกิจที่เกี่ยวข้องสำหรับแต่ละรายการในการสร้าง breadcrumb:
label
จะเป็นข้อความที่พิมพ์ มันสามารถเป็นได้:$
ในกรณีนี้ฉลาก breadcrumb จะถูกสกัดจากตัวแปรที่ส่งผ่านไปยังเทมเพลต สามารถใช้เส้นทางคุณสมบัติได้เช่น: $variable.property.path
route
จะถูกใช้เพื่อสร้าง URL สำหรับจุดยึดรายการ (ถ้ามี) หากไม่ได้ให้ไว้รายการจะไม่สามารถคลิกได้params
จะถูกใช้เพื่อสร้าง URL ที่เกี่ยวข้องกับเส้นทางที่ให้ไว้ มันเป็นอาร์เรย์ที่เชื่อมโยงซึ่งแต่ละค่าสามารถเป็นได้:$variable.property.path
การรักษานั้นเหมือนกับใน "ฉลาก" สิ่งนี้มีประโยชน์ในการดึงพารามิเตอร์ URL แบบไดนามิก (เช่นเอนทิตีเอนทิตี) เริ่มต้นจากตัวแปรมุมมองtranslationDomain
จะถูกใช้เพื่อแปลคีย์ที่ให้ไว้ในแอตทริบิวต์ label
หากเป็น null
โดเมนการแปลเริ่มต้นจะถูกใช้ ระบุ false
หากคุณใส่สตริงที่ไม่สามารถใช้งานได้ใน label
และคุณไม่ต้องการใช้เป็นคีย์การแปลหมายเหตุ: คุณไม่จำเป็นต้องผ่านพารามิเตอร์เส้นทางทั้งหมดที่จำเป็นโดยเส้นทางตราบใดที่พารามิเตอร์เส้นทางเหล่านี้มีอยู่แล้วใน URL สำหรับคำขอปัจจุบัน กล่าวอีกนัยหนึ่งถ้าโครงสร้างลำดับชั้นของ breadcrumb ของคุณอย่างใด "ตรงกับ" โครงสร้าง URL ของคุณ
ตัวอย่าง: สมมติว่าคุณมีเส้นทางต่อไปนี้พร้อมพารามิเตอร์และ URL ที่ได้:
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
หากคุณอยู่ในการดำเนินการสำหรับเส้นทาง children_edit
และคุณต้องการสร้าง breadcrumb รวมถึงขั้นตอนทั้งหมดข้างต้นคุณจะสามารถใช้คำอธิบายประกอบต่อไปนี้:
<?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 )
{
// ...
}
โปรดทราบว่าคุณไม่จำเป็นต้องจัดเตรียมพารามิเตอร์เส้นทาง (เนื่องจากคำขอปัจจุบันมีทั้งหมดแล้ว) มันจะทำงานเหมือนกันถ้าคุณสร้างผ่านรหัสแทน
เทมเพลตเริ่มต้นแบบมัดสำหรับการแสดงผล breadcrumb สามารถแทนที่ได้โดยการเพิ่มบรรทัดต่อไปนี้ใน config.yml
ของแอปพลิเคชันของคุณ:
slope_it_breadcrumb :
template : YourBundle::breadcrumb.html.twig
หากคุณตั้งใจจะทำสิ่งนี้ขอแนะนำให้คัดลอก Resources/views/breadcrumb.html.twig
ไปยังชุดของคุณและปรับแต่ง อย่างไรก็ตามในเทมเพลตของคุณคุณจะต้องวนซ้ำตัวแปร items
เพื่อแสดงผลขนมปังที่กำหนดเอง
ภายใต้สถานการณ์เหล่านี้โปรดแยก repo นี้และสร้างคำขอดึง เรามีความสุขมากกว่าที่จะยอมรับการมีส่วนร่วม!