该捆绑包提供了一种在您的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
以渲染自定义的面包屑即可。
在这些情况下,请分配此存储库并创建拉动请求。我们很乐意接受贡献!