robotsinside/laravel-breadcrumbs

为 Laravel 提供的简单面包屑实现。

1.2.0 2022-05-03 10:28 UTC

This package is auto-updated.

Last update: 2024-09-20 01:31:50 UTC


README

Latest Version on Packagist Total Downloads CI License: MIT

Laravel 的一个简单面包屑实现,支持基于类的灵活段自定义。

目录

安装

根据您使用的 Laravel 版本,您可能需要指定要安装的版本。

  1. 运行 composer require robotsinside/laravel-breadcrumbs

  2. 可选:在 config/app.php 中注册服务提供者

/*
* Package Service Providers...
*/
\RobotsInside\Breadcrumbs\BreadcrumbsServiceProvider::class,

自动发现已启用,因此可以跳过此步骤。

  1. config/app.php 中注册外观以供视图使用
    'aliases' => [
        ...
        'Breadcrumbs' => \RobotsInside\Breadcrumbs\Facades\Breadcrumbs::class,
    ],
  1. 发布配置文件 php artisan vendor:publish --provider="RobotsInside\Breadcrumbs\BreadcrumbsServiceProvider" --tag="config"
  2. 发布视图文件 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\\,但您可以根据项目需求进行更改。

面包屑标签

在我的个人项目中,我经常使用 nametitle 模型属性作为我的面包屑标签。在这些琐碎的情况下定义自定义面包屑标签是麻烦的。相反,您可以在配置文件中定义一个 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>

包移除

要删除包

  1. config/app.php 中删除外观
  2. 从您的应用程序中删除 path/to/Breadcrumbs 目录
  3. 删除您视图中所有的 {{ Breadcrumbs::render }} 语句
  4. 删除 config/breadcrumbs.php
  5. 运行 composer remove robotsinside/laravel-breadcrumbs

在开发此包时,我面临着一个决定:如何让用户自定义他们的面包屑。最初我以为我会提供一个需要实现于 Model 类的 BreadcrumbsInteface,但后来决定放弃,因为这意味着您需要在所有具有面包屑标签的模型上实现方法。

相反,我选择了配置数组映射,因为这会更容易在以后如果您决定从项目中删除此包时将其删除。

待办事项

  1. 编写测试
  2. 完成 README

变更日志

有关最近更改的更多信息,请参阅变更日志

贡献

有关详细信息,请参阅贡献指南

安全性

如果您发现任何与安全相关的问题,请通过电子邮件robertfrancken@gmail.com联系,而不是使用问题跟踪器。

鸣谢

咖啡时间

愿意为☕☕☕工作

Buy Me A Coffee

许可

MIT 许可证(MIT)。有关更多信息,请参阅许可证文件