tabuna / breadcrumbs
为您的Laravel应用轻松添加面包屑。
4.1.0
2024-03-14 02:01 UTC
Requires
- php: ^8.1
- ext-json: *
- laravel/framework: ^10.0|^11.0
- laravel/serializable-closure: ^1.0
Requires (Dev)
- orchestra/testbench: ^8.0|^9.0
- phpunit/php-code-coverage: ^10.|^11.0
- phpunit/phpunit: ^10.5|^11.0
README
简介
面包屑显示一系列链接,指示当前页面在整个网站层次结构中的位置。例如,如“首页 / 示例文章 / 编辑”这样的面包屑表示用户正在查看“示例文章”的编辑页面。他可以点击“示例文章”查看该页面,或点击“首页”返回首页。
此包为 Laravel 框架 制作,可轻松在应用中构建面包屑。
安装
在命令行中运行以下命令
$ composer require tabuna/breadcrumbs
这将更新 composer.json
并将包安装到 vendor/
目录中。
定义您的面包屑
现在您可以直接在路由文件中定义面包屑
use Tabuna\Breadcrumbs\Trail; // Home Route::get('/', fn () => view('home')) ->name('home') ->breadcrumbs(fn (Trail $trail) => $trail->push('Home', route('home')) ); // Home > About Route::get('/about', fn () => view('home')) ->name('about') ->breadcrumbs(fn (Trail $trail) => $trail->parent('home')->push('About', route('about')) );
您也可以从请求中获取参数
Route::get('/category/{category}', function (Category $category){ //In this example, the category object is your Eloquent model. //code... }) ->name('category') ->breadcrumbs(fn (Trail $trail, Category $category) => $trail->push($category->title, route('category', $category->id)) );
路由检测
该包尝试减少所需行数。为此,您可以选择不传递 route()
方法的返回结果。以下两个声明将是等效的
Route::get('/', fn () => view('home')) ->name('home') ->breadcrumbs(fn (Trail $trail) => $trail->push('Home', route('home')) ); Route::get('/', fn () => view('home')) ->name('home') ->breadcrumbs(fn (Trail $trail) => $trail->push('Home', 'home') );
喜欢使用单独的路由文件吗?
您只需将所需的文件添加到服务提供器中即可完成此操作
namespace App\Providers; use Illuminate\Support\ServiceProvider; class BreadcrumbsServiceProvider extends ServiceProvider { /** * Bootstrap the application events. * * @return void */ public function boot() { require base_path('routes/breadcrumbs.php'); } }
然后它将成为路由目录中的特殊文件
// routes/breadcrumbs.php // Photos Breadcrumbs::for('photo.index', fn (Trail $trail) => $trail->parent('home')->push('Photos', route('photo.index')) );
路由资源
当使用资源时,会为必须手动指定值的整个路由组声明路由
// routes/web.php Route::resource('photos', 'PhotoController');
最好在服务提供器中指定此内容,因为路由文件可能会被缓存
namespace App\Providers; use Illuminate\Support\ServiceProvider; use Tabuna\Breadcrumbs\Breadcrumbs; use Tabuna\Breadcrumbs\Trail; class BreadcrumbsServiceProvider extends ServiceProvider { /** * Bootstrap any application services. * * @return void */ public function boot() { Breadcrumbs::for('photos.index', fn (Trail $trail) => $trail->push('Photos', route('home')) ); Breadcrumbs::for('photos.create', fn (Trail $trail) => $trail ->parent('photos.index', route('photos.index')) ->push('Add new photo', route('home')) ); } }
使用Blade组件输出面包屑
您可以使用输出组件
<ul> <x-tabuna-breadcrumbs/> </ul>
要定义列表项的类,可以指定
<x-tabuna-breadcrumbs class="item" active="active" />
您还可以传递参数
<x-tabuna-breadcrumbs parameters="['value 1', 'value 2', 'value 3']" />
并明确调用命名路由
<x-tabuna-breadcrumbs route="static" />
使用Blade视图输出面包屑
为了在所需的页面上显示面包屑,只需调用
@if(Breadcrumbs::has()) @foreach (Breadcrumbs::current() as $crumbs) @if ($crumbs->url() && !$loop->last) <li class="breadcrumb-item"> <a href="{{ $crumbs->url() }}"> {{ $crumbs->title() }} </a> </li> @else <li class="breadcrumb-item active"> {{ $crumbs->title() }} </li> @endif @endforeach @endif
结果如下所示
首页 / 关于
致谢
多年来,我成功使用了 Dave James Miller 的包来解决我的问题,但他停止了开发和支持。经过长时间的搜索,我喜欢 Dwight Watson 的包,但面包屑与路由公告的隔离没有让我满意。这就是我创建这个包的原因。它使用了前两个包的代码。
许可
MIT 许可证 (MIT)。请参阅 许可文件 以获取更多信息。