fragkp/laravel-route-breadcrumb

4.0.0 2020-11-27 20:19 UTC

This package is auto-updated.

Last update: 2024-09-28 02:26:25 UTC


README

Latest Version Total Downloads

此包旨在为面包屑提供一个简单的解决方案。将面包屑直接添加到您的路由中,并在视图中显示它们。

安装

您可以通过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)。有关更多信息,请参阅许可证文件