atstudio-tech / breadcrumbs
为 Laravel 提供的另一个面包屑组件:简单易用。
Requires
- php: ^8.1
- illuminate/support: ^8.0|^9.0|^10.0
Requires (Dev)
- orchestra/testbench: ^7.1
- pestphp/pest: ^1.21
- pestphp/pest-plugin-laravel: ^1.2
- phpunit/phpunit: ^9.5
Replaces
- atorscho/laravel-breadcrumbs: 2.4.*
README
对较旧的 Laravel 包的完整重写,让您可以快速轻松地构建面包屑。
public function show(Post $post) { crumbs('Posts', '/posts')->add('Show Post #3', 'posts.show', 3); }
<section> @crumbs </section> <main>Main Content</main>
安装
您可以通过在控制台运行以下命令来安装该软件包
composer require atstudio-tech/breadcrumbs
服务提供者将被自动发现,因此无需手动将其添加到您的 /config/app.php
文件中。
供应商文件
您可以使用以下命令发布配置和视图文件
php artisan vendor:publish --tag="breadcrumbs-config"
php artisan vendor:publish --tag="breadcrumbs-views"
用法
有兩個不同的地方可以填充面包屑列表
- 在您的路由文件中,例如
web.php
。 - 直接在您的路由动作中,例如闭包或控制器。
路由文件
use ATStudio\Breadcrumbs\Breadcrumbs; Route::get('posts', [PostController::class, 'index'])->crumbs(function (Breadcrumbs $crumbs) { $crumbs->add('Posts', '/posts'); // Here we are using a hard-coded URL });
使用此方法,您可以从路由声明中解脱出来,但是我们不能访问路由参数。在这种情况下,我们可以在控制器中放置面包屑声明。
此路由宏与
crumbs
辅助函数具有相同的签名。
控制器
public function show(Post $post) { crumbs('Posts', '/posts')->add('Show Post #3', 'posts.show', [3]); // The third parameter can also be a primitive: `add(..., ..., 3)` }
这样,您可以使用路由参数来构建您的面包屑,例如显示资源的 ID。
表示法
还有三种不同的方法来构建面包屑列表
面包屑类
use ATStudio\Breadcrumbs\Breadcrumbs; public function show(Post $post, Breadcrumbs $crumbs) { $crumbs->add('Show Post #3', 'posts.show', [3]); }
或
use ATStudio\Breadcrumbs\Breadcrumbs; public function show(Post $post) { Breadcrumbs::instance()->add('Show Post #3', 'posts.show', [3]); }
面包屑外观
use ATStudio\Breadcrumbs\Facades\Crumbs; public function show(Post $post) { Crumbs::add('Show Post #3', 'posts.show', [3]); }
辅助函数
这是我们迄今为止使用的函数
public function show(Post $post) { crumbs()->add('Show Post #3', 'posts.show', [3]); }
如果没有传递任何参数,该函数将返回主 Breadcrumbs
类的实例。
渲染
您可以通过在 Blade 视图中调用 crumbs()->render()
或使用自定义指令来渲染面包屑列表
<section> {{ crumbs()->render() }} </section> <!-- or --> <section> @crumbs </section>
两种表示法都接受一个可选参数 $view
crumbs()->render('breadcrumbs::custom-view')
@crumbs(breadcrumbs::custom-view)
您可以通过运行以下命令来自定义已存在的视图,该视图包含在软件包中
php artisan vendor:publish --tag="breadcrumbs-views"
或指定一个自定义视图在 config('breadcrumbs.view')
中。
视图自定义
假设我们想为我们的面包屑创建一个全新的视图。我们首先在 resources/views/vendor/breadcrumbs/custom-theme.blade.php
中创建一个新的 Blade 文件(我更喜欢将自定义视图放入 vendor
文件夹中,但您可以在 resources/views
文件夹中的任何地方放置它们,只要它们在文件夹内即可)。
让我们看看默认的视图文件(resources/views/vendor/breadcrumbs/plain.blade.php
)
<nav aria-label="Breadcrumb"> <ol role="list" style="display: flex; align-items: center; gap: 1rem"> @foreach ($breadcrumbs as $breadcrumb) @if (!$loop->first) <li>/</li> @endif @if ($breadcrumb->active) <li>{{ $breadcrumb->title }}</li> @else <a href="{{ $breadcrumb->path }}"> {{ $breadcrumb->title }} </a> @endif @endforeach </ol> </nav>
以下几点需要注意
$breadcrumbs
将自动传递给视图。这是Breadcrumbs
类的实例。您也可以调用$breadcrumbs->all()
,它与上面的相同。$breadcrumb->active
是一个计算属性,当面包屑的路径与当前 URL 相同时,它简单地返回true
。
API
Breadcrumbs::add(string|array $title, ?string $path = null, mixed $params = null)
面包屑需要一个标题。
如果没有提供 $path
,将使用当前 URL。 $path
可以是相对 URL,它将被转换为绝对链接,或者是一个路由名称。如果是路由名称,您还可以使用第三个参数 $params
。
$title
接受字符串和数组。如果是数组,它必须包含以下键
[ 'title' => '', 'path' => '', 'params' => [], // optional ]
crumbs(string|array|callable|null $title = null, ?string $path = null, mixed $params = null)
如果您调用此辅助函数而不带任何参数,它将简单地返回一个 Breadcrumbs
的实例,如上所述。否则,它接受与 Breadcrumbs::add()
相同的参数。
仅针对此功能,$title
参数也接受一个闭包(同上,Route::crumbs()
宏也是如此,如上例所示)
use ATStudio\Breadcrumbs\Breadcrumbs; public function show(Post $post) { crumbs(function (Breadcrumbs $crumbs) { $crumbs->add('All Posts', 'posts.index'); $crumbs->add('Show Post #1', 'posts.show', 1); }); }
面包屑项
单个面包屑项具有title
、path
和active
属性。
变更日志
查看变更日志文件,了解此包的所有变更。
贡献
请参阅贡献指南以获取详细信息。
鸣谢
许可证
MIT许可证(MIT)。请参阅许可证文件以获取更多信息。