該捆綁包提供了一種在您的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 (),
];
// ...
}
// ...
}
創建麵包屑的方法有兩種:通過代碼(1)或通過屬性(2)。
通過代碼:您可以在控制器中註入麵包屑構建器並添加麵包屑項目:
<?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() }}
無論您用來創建麵包屑的方式,結果都將是:
Home > Value of entity property > Cool stuff
其中前兩個項目是錨,最後一個項目僅是文本。
此外,如果您需要知道麵包屑是否有物品,則可以使用:
{{ slope_it_is_breadcrumb_empty() }}
在引擎蓋下,這是麵包屑一代中每個項目所涉及的業務邏輯:
label
將是印刷文本。可以是:$
。在這種情況下,將從傳遞給模板的變量中提取麵包屑標籤。可以使用屬性路徑,例如: $variable.property.path
route
將用於生成項目錨的URL(如果提供)。如果未提供,則該項目將無法單擊。params
將用於生成與提供路由相關的URL。這是一個關聯陣列,每個值都可以是:$variable.property.path
“特殊”字符串。治療與“標籤”完全相同。這對於從視圖變量開始動態檢索URL參數(例如實體ID)很有用。translationDomain
將用於翻譯label
屬性中提供的密鑰。如果為null
,將使用默認翻譯域。如果您在label
中放置了不可轉移的字符串,並且不想將其用作翻譯鍵,請提供false
。注意:您不需要傳遞路由所需的所有路由參數,只要這些路由參數已經存在於當前請求的URL中。換句話說,如果您的麵包屑分層結構以某種方式“匹配”您的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
的操作,並且想生成一個麵包屑,包括上述所有步驟,您將能夠使用以下註釋:
<?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 )
{
// ...
}
請注意您不必提供路由參數(因為當前請求已經所有)。如果您通過代碼構建它,它將工作相同。
通過將以下行添加到應用程序的config.yml
:
slope_it_breadcrumb :
template : YourBundle::breadcrumb.html.twig
如果您打算這樣做,建議將Resources/views/breadcrumb.html.twig
複製到捆綁包並自定義。但是,在模板中,您只需要迭代可變的items
以渲染自定義的麵包屑即可。
在這些情況下,請分配此存儲庫並創建拉動請求。我們很樂意接受貢獻!