fragkp / laravel-route-breadcrumb
Requires
- php: ^7.4|^8.0
- laravel/framework: ^8.0
Requires (Dev)
- mockery/mockery: ^1.4
- orchestra/database: ^6.0
- orchestra/testbench: ^6.0
- phpunit/phpunit: ^9.4
README
此包旨在为面包屑提供一个简单的解决方案。将面包屑直接添加到您的路由中,并在视图中显示它们。
安装
您可以通过composer安装此包
composer require fragkp/laravel-route-breadcrumb
如果您还想使用外观来访问主面包屑类,请将以下行添加到config/app.php中的外观数组中
'Breadcrumb' => Fragkp\LaravelRouteBreadcrumb\Facades\Breadcrumb::class,
此包包含一些为最活跃的CSS框架预构建的视图
如果您想使用这些视图之一,请按如下方式包含它
@include('laravel-breadcrumb::bootstrap3')
要自定义预构建的视图,请运行此命令
php artisan vendor:publish Fragkp\LaravelRouteBreadcrumb\BreadcrumbServiceProvider --tag=views
注意:您还可以创建自己的自定义视图来显示面包屑链接。
使用方法
定义面包屑
基本
要将面包屑标题添加到您的路由中,请调用breadcrumb方法并传递您的标题。
Route::get('/')->breadcrumb('Your custom title');
索引
在某些网站上,您希望在面包屑中始终包含一个索引。使用breadcrumbIndex方法。 此方法应仅使用一次。
注意:breadcrumbIndex还会为此路由设置面包屑标题。
Route::get('/')->breadcrumbIndex('Start'); Route::get('/foo')->breadcrumb('Your custom title');
在分组内
breadcrumb方法也适用于路由分组内。
Route::get('/')->breadcrumbIndex('Start'); Route::prefix('/foo')->group(function () { Route::get('/bar')->breadcrumb('Your custom title'); });
分组索引
您还可以通过调用breadcrumbGroup指定分组索引标题。 此方法应在分组内仅使用一次。
注意:breadcrumbGroup也会为此路由设置面包屑标题。
Route::get('/')->breadcrumbIndex('Start'); Route::prefix('/foo')->group(function () { Route::get('/')->breadcrumbGroup('Foo group index'); Route::get('/bar')->breadcrumb('Your custom title'); });
自定义标题解析器
如果您想自定义面包屑标题,可以向所有面包屑方法传递一个闭包。
Route::get('/')->breadcrumb(function () { return 'Your custom title'; });
您还可以传递一个完全限定的类名。这将调用您的类。
Route::get('/')->breadcrumb(YourCustomTitleResolver::class); class YourCustomTitleResolver { public function __invoke() { return 'Your custom title'; } }
您还可以传递一个可调用的对象。
Route::get('/foo/{id}')->breadcrumb([app('my_breadcrumb_resolver'), 'resolve']); // my_breadcrumb_resolver class MyBreadcrumbResolver { public function resolve($id) { $title = $this->repo->findById($id); return $title->getName(); } }
路由参数
所有路由参数都将传递到您的解析器。支持路由模型绑定。
Route::get('/{foo}')->breadcrumb(YourCustomTitleResolver::class); class YourCustomTitleResolver { public function __invoke(Foo $foo) { return "Title: {$foo->title}"; } }
访问面包屑
链接
links方法将返回一个BreadcrumbLink的Collection。
注意:数组按uri索引。
app(Breadcrumb::class)->links(); // or use here the facade
示例结果
Illuminate\Support\Collection {#266 #items: array:2 [ "/" => Fragkp\LaravelRouteBreadcrumb\BreadcrumbLink {#41 +uri: "/" +title: "Start" } "foo" => Fragkp\LaravelRouteBreadcrumb\BreadcrumbLink {#262 +uri: "foo" +title: "Your custom title" } ] }
索引
index方法将返回一个BreadcrumbLink的单例。如果没有定义任何索引,则返回null。
app(Breadcrumb::class)->index(); // or use here the facade
示例结果
Fragkp\LaravelRouteBreadcrumb\BreadcrumbLink {#36 +uri: "/" +title: "Start" }
当前
current方法将返回一个BreadcrumbLink的单例。如果没有提供路由(例如错误),则返回null。
app(Breadcrumb::class)->current(); // or use here the facade
示例结果
Fragkp\LaravelRouteBreadcrumb\BreadcrumbLink {#36 +uri: "/" +title: "Your custom title" }
视图示例
在视图中访问面包屑的一个好方法是将其通过View Composer绑定。
有关View Composers的更多信息,请参阅Laravel文档。
// app/Providers/AppServiceProvider.php class AppServiceProvider extends ServiceProvider { public function boot() { View::composer('your-view', function ($view) { $view->with('breadcrumb', app(Breadcrumb::class)->links()); }); } }
// resources/views/breadcrumb.blade.php <ul> @foreach ($breadcrumb as $link) <li> <a href="{{ url($link->uri) }}">{{ $link->title }}</a> </li> @endforeach </ul>
测试
./vendor/bin/phpunit
许可证
MIT许可证(MIT)。有关更多信息,请参阅许可证文件。