robotsinside / laravel-breadcrumbs
为 Laravel 提供的简单面包屑实现。
Requires
- php: ^7.2|^8.0
- illuminate/database: ^6.0|^8.0|^9.0
- illuminate/support: ^6.0|^8.0|^9.0
Requires (Dev)
- orchestra/testbench: ^6.0
- phpunit/phpunit: ^9.0
This package is auto-updated.
Last update: 2024-09-20 01:31:50 UTC
README
Laravel 的一个简单面包屑实现,支持基于类的灵活段自定义。
目录
安装
根据您使用的 Laravel 版本,您可能需要指定要安装的版本。
-
运行
composer require robotsinside/laravel-breadcrumbs
。 -
可选:在
config/app.php
中注册服务提供者
/* * Package Service Providers... */ \RobotsInside\Breadcrumbs\BreadcrumbsServiceProvider::class,
自动发现已启用,因此可以跳过此步骤。
- 在
config/app.php
中注册外观以供视图使用
'aliases' => [ ... 'Breadcrumbs' => \RobotsInside\Breadcrumbs\Facades\Breadcrumbs::class, ],
- 发布配置文件
php artisan vendor:publish --provider="RobotsInside\Breadcrumbs\BreadcrumbsServiceProvider" --tag="config"
- 发布视图文件
php artisan vendor:publish --provider="RobotsInside\Breadcrumbs\BreadcrumbsServiceProvider" --tag="views"
用法
安装完成后,您就可以立即开始渲染面包屑。
<div class="container"> {{ Breadcrumbs::render() }} </div>
例如(使用 Bootstrap 4 模板),如果 URL 是 http://example.test/about-us/team
,则输出将如下所示
+-----------+-------------------------------+-----------------------+---------------------------------------------------------------+ | Method | URI | Name | Action | +-----------+-------------------------------+-----------------------+---------------------------------------------------------------+ | GET|HEAD | about-us/team | about.team | Closure |
<div class="container"> <nav aria-label="You are here:" role="navigation"> <ul class="breadcrumb"> <li class="breadcrumb-item"> <a href="http://example.test">Home</a> </li> <li class="breadcrumb-item"> <a href="http://example.test/about-us">About us</a> </li> <li class="breadcrumb-item"> Team </li> </ul> </nav> </div>
以下示例包括一个注入的模型。
+-----------+-------------------------------+-----------------------+---------------------------------------------------------------+ | Method | URI | Name | Action | +-----------+-------------------------------+-----------------------+---------------------------------------------------------------+ | GET|HEAD | posts/{post} | posts.show | App\App\Posts\Controllers\PostController@show |
Post
模型将被自动注入到面包屑类中,使用的标签将取决于您是否为该模型定义了面包屑标签类,以及您的配置文件中列出的哪些 modelAttributes
。
您可以在配置文件中的 modelAttributes
键中定义用于面包屑中自动解析的模型属性选择。对于更复杂的情况,您可以定义一个如下所示的 BreadcrumbLabel
类。此类包含一个 model
属性,通过路由模型绑定进行解析。
<?php namespace App\Breadcrumbs\Labels; use RobotsInside\Breadcrumbs\Label; class PostBreadcrumbLabel extends Label { public function label() { return $this->model->whatever; } }
别忘了按照面包屑标签中解释的那样注册您的标签类。
配置
配置文件应该是相当直观的。
模板
您可以选择预定义的模板,或创建自己的模板。提供的选项包括
- Bootstrap 3(bootstrap-3)
- Bootstrap 4(bootstrap-4)
- Bulma(bulma)
- Foundation(foundation)
如果您想提供自己的面包屑模板,请将您的 Blade 模板名称放在模板选项中
'template' => [ 'style' => 'custom', 'path' => 'breadcrumbs.custom' // Will look in: 'views.breadcrumbs.custom' ],
面包屑转换器
如果您想定义任何面包屑转换器类,您需要提供包含 Mutator
类的命名空间。默认情况下,这设置为 App\\Breadcrumbs\\Mutators\\
,但您可以根据项目需求进行更改。
面包屑标签
在我的个人项目中,我经常使用 name
和 title
模型属性作为我的面包屑标签。在这些琐碎的情况下定义自定义面包屑标签是麻烦的。相反,您可以在配置文件中定义一个 modelAttributes
数组来处理。
'modelAttributes' => [ 'name', 'title', 'whatever' ]
如果您的模型与该数组中的多个属性匹配,则将使用最左边的数据库属性。
要为您的面包屑标签定义更复杂的逻辑,您需要在 config/breadcrumbs.php
中提供 Model
=> BreadcrumbLabel
类的映射。
'labels' => [ App\Post::class => App\Breadcrumbs\Labels\PostBreadcrumbLabel::class, ],
移除节点
假设您在应用程序中有一个管理区域,在这种情况下,您可能希望从面包屑中移除 admin
段。
您可以通过定义一个突变器并在 mutate
方法中调用 remove
方法来实现这一点。remove
方法期望一个数组,因此如果需要,您也可以删除多个节点。
<?php namespace App\Breadcrumbs\Mutators; use RobotsInside\Breadcrumbs\Mutator; class AdminMutator extends Mutator { public function mutate() { $this->remove(['admin']); } }
{{ Breadcrumbs::mutate('AdminMutator')->render() }}
如果 URL 是 http://example.test/admin/posts/my-post
,则将渲染面包屑。
<nav aria-label="You are here:" role="navigation"> <ul class="breadcrumb"> <li class="breadcrumb-item"> <a href="http://example.test"> Home </a> </li> <li class="breadcrumb-item"> <a href="http://example.test/posts"> Posts </a> </li> <li class="breadcrumb-item"> My Post </li> </ul> </nav>
添加节点
如果由于某些原因需要添加一个或多个节点,您也可以这样做。
您可以通过定义一个突变器并在 mutate
方法中调用 add
方法来实现这一点,例如。
<?php namespace App\Breadcrumbs\Mutators; use RobotsInside\Breadcrumbs\Mutator; class AddPostIndexMutator extends Mutator { public function mutate() { $this->add('All Posts', 'my-post', route('posts.index')); } }
{{ Breadcrumbs::mutate('AddPostIndexMutator')->render() }}
如果 URL 是 http://example.test/my-post
,则将渲染面包屑。
<nav aria-label="You are here:" role="navigation"> <ul class="breadcrumb"> <li class="breadcrumb-item"> <a href="http://example.test">Home</a> </li> <li class="breadcrumb-item"> <a href="http://example.test/posts">All Posts</a> </li> <li class="breadcrumb-item"> My Post </li> </ul> </nav>
包移除
要删除包
- 在
config/app.php
中删除外观 - 从您的应用程序中删除
path/to/Breadcrumbs
目录 - 删除您视图中所有的
{{ Breadcrumbs::render }}
语句 - 删除
config/breadcrumbs.php
- 运行
composer remove robotsinside/laravel-breadcrumbs
在开发此包时,我面临着一个决定:如何让用户自定义他们的面包屑。最初我以为我会提供一个需要实现于 Model
类的 BreadcrumbsInteface
,但后来决定放弃,因为这意味着您需要在所有具有面包屑标签的模型上实现方法。
相反,我选择了配置数组映射,因为这会更容易在以后如果您决定从项目中删除此包时将其删除。
待办事项
- 编写测试
- 完成 README
变更日志
有关最近更改的更多信息,请参阅变更日志。
贡献
有关详细信息,请参阅贡献指南。
安全性
如果您发现任何与安全相关的问题,请通过电子邮件robertfrancken@gmail.com联系,而不是使用问题跟踪器。
鸣谢
咖啡时间
愿意为☕☕☕工作
许可
MIT 许可证(MIT)。有关更多信息,请参阅许可证文件。