一種簡單的 Laravel 風格的創建麵包屑的方法。
這個項目是 Dave James Miller 原創的 Laravel Breadcrumbs 的官方分支,如果沒有一群出色的第一天貢獻者,這個項目是不可能實現的。謝謝大家!
拉維爾 | Laravel 麵包屑 |
---|---|
11.x | 9.x |
10.x | 9.x |
9.x | 9.x |
8.x | 9.x |
7.x | 8.x |
6.x | 8.x |
對於較舊的 Laravel 版本,請參考原始 GitHub 專案。如果您喜歡引用此包,則所有標籤都已鏡像,但不會提供功能差異。
composer require diglactic/laravel-breadcrumbs
建立一個名為routes/breadcrumbs.php
的文件,如下所示:
<?php // routes/breadcrumbs.php
// Note: Laravel will automatically resolve `Breadcrumbs::` without
// this import. This is nice for IDE syntax and refactoring.
use Diglactic Breadcrumbs Breadcrumbs ;
// This import is also not required, and you could replace `BreadcrumbTrail $trail`
// with `$trail`. This is nice for IDE type checking and completion.
use Diglactic Breadcrumbs Generator as BreadcrumbTrail ;
// Home
Breadcrumbs:: for ( ' home ' , function ( BreadcrumbTrail $ trail ) {
$ trail -> push ( ' Home ' , route ( ' home ' ));
});
// Home > Blog
Breadcrumbs:: for ( ' blog ' , function ( BreadcrumbTrail $ trail ) {
$ trail -> parent ( ' home ' );
$ trail -> push ( ' Blog ' , route ( ' blog ' ));
});
// Home > Blog > [Category]
Breadcrumbs:: for ( ' category ' , function ( BreadcrumbTrail $ trail , $ category ) {
$ trail -> parent ( ' blog ' );
$ trail -> push ( $ category -> title , route ( ' category ' , $ category ));
});
有關更多詳細信息,請參閱定義麵包屑部分。
預設情況下,將呈現 Bootstrap 5 麵包屑清單。若要變更此設置,請執行以下命令初始化設定檔:
php artisan vendor:publish --tag=breadcrumbs-config
然後,開啟config/breadcrumbs.php
並編輯此行:
// config/breadcrumbs.php
' view ' => ' breadcrumbs::bootstrap5 ' ,
可能的值為:
breadcrumbs::bootstrap5
– Bootstrap 5breadcrumbs::bootstrap4
– Bootstrap 4breadcrumbs::bulma
– 布瑪breadcrumbs::foundation6
– 基礎 6breadcrumbs::json-ld
– JSON-LD 結構化數據breadcrumbs::materialize
– 物化breadcrumbs::tailwind
– Tailwind CSSbreadcrumbs::uikit
– UIkitpartials.breadcrumbs
有關更多詳細信息,請參閱自訂模板部分。
您也可以在運行時指定自訂視圖。
在每個頁面的視圖中呼叫Breadcrumbs::render()
,並向其傳遞要使用的麵包屑的名稱和任何其他參數:
{{-- resources/views/home.blade.php --}}
{{ Breadcrumbs :: render ( ' home ' ) } }
{{-- resources/views/categories/show.blade.php --}}
{{ Breadcrumbs :: render ( ' category ' , $category ) } }
請參閱輸出麵包屑部分以了解其他輸出選項,並參閱路由綁定麵包屑以了解自動將麵包屑名稱連結到路由名稱的方法。
麵包屑通常對應於頁面的操作或類型。對於每個麵包屑,您可以指定名稱、麵包屑標題以及要將其連結到的 URL。由於這些可能會動態變化,因此您可以在閉包中執行此操作,並將所需的任何變數傳遞到閉包中。
下面的例子應該可以清楚說明:
最簡單的麵包屑可能是您的主頁,如下所示:
<?php // routes/breadcrumbs.php
use Diglactic Breadcrumbs Breadcrumbs ;
use Diglactic Breadcrumbs Generator as BreadcrumbTrail ;
Breadcrumbs:: for ( ' home ' , function ( BreadcrumbTrail $ trail ) {
$ trail -> push ( ' Home ' , route ( ' home ' ));
});
為了產生 URL,您可以使用任何標準的 Laravel URL 產生方法,包括:
url('path/to/route')
( URL::to()
)secure_url('path/to/route')
route('routename')
或route('routename', 'param')
或route('routename', ['param1', 'param2'])
( URL::route()
)action('controller@action')
( URL::action()
)'http://www.example.com/'
)這個例子將會被渲染成這樣:
{{ Breadcrumbs :: render ( ' home ' ) } }
並產生以下輸出:
家
這是另一個靜態頁面,但前面有一個父連結:
<?php // routes/breadcrumbs.php
use Diglactic Breadcrumbs Breadcrumbs ;
use Diglactic Breadcrumbs Generator as BreadcrumbTrail ;
Breadcrumbs:: for ( ' blog ' , function ( BreadcrumbTrail $ trail ) {
$ trail -> parent ( ' home ' );
$ trail -> push ( ' Blog ' , route ( ' blog ' ));
});
它透過呼叫上面定義的home
麵包屑的閉包來工作。
它會被渲染成這樣:
{{ Breadcrumbs :: render ( ' blog ' ) } }
並產生以下輸出:
首頁 / 博客
請注意,即使指定了 URL,預設範本也不會為最後一個麵包屑(目前頁面的麵包屑)建立連結。您可以透過建立自己的範本來覆蓋它 – 有關更多詳細信息,請參閱自訂範本。
這是從資料庫動態產生的頁面:
<?php // routes/breadcrumbs.php
use App Models Post ;
use Diglactic Breadcrumbs Breadcrumbs ;
use Diglactic Breadcrumbs Generator as BreadcrumbTrail ;
Breadcrumbs:: for ( ' post ' , function ( BreadcrumbTrail $ trail , Post $ post ) {
$ trail -> parent ( ' blog ' );
$ trail -> push ( $ post -> title , route ( ' post ' , $ post ));
});
$post
物件(可能是 Eloquent 模型,但可以是任何東西)將從視圖中傳入:
{{ Breadcrumbs :: render ( ' post ' , $post ) } }
其結果是這樣的輸出:
首頁 / 部落格 / 貼文標題
您也可以將方法呼叫連結到$trail
。如果您使用支援箭頭函數的 PHP 7.4 及更高版本,您可能會喜歡以下更簡潔的語法:
Breadcrumbs:: for (
' post ' ,
fn ( BreadcrumbTrail $ trail , Post $ post ) => $ trail
-> parent ( ' blog ' )
-> push ( $ post -> title , route ( ' post ' , $ post ))
);
最後,如果有巢狀類別或其他特殊要求,可以多次呼叫$trail->push()
:
<?php // routes/breadcrumbs.php
use App Models Category ;
use Diglactic Breadcrumbs Breadcrumbs ;
use Diglactic Breadcrumbs Generator as BreadcrumbTrail ;
Breadcrumbs:: for ( ' category ' , function ( BreadcrumbTrail $ trail , Category $ category ) {
$ trail -> parent ( ' blog ' );
foreach ( $ category -> ancestors as $ ancestor ) {
$ trail -> push ( $ ancestor -> title , route ( ' category ' , $ ancestor ));
}
$ trail -> push ( $ category -> title , route ( ' category ' , $ category ));
});
或者,您可以建立一個遞歸函數,如下所示:
<?php // routes/breadcrumbs.php
use App Models Category ;
use Diglactic Breadcrumbs Breadcrumbs ;
use Diglactic Breadcrumbs Generator as BreadcrumbTrail ;
Breadcrumbs:: for ( ' category ' , function ( BreadcrumbTrail $ trail , Category $ category ) {
if ( $ category -> parent ) {
$ trail -> parent ( ' category ' , $ category -> parent );
} else {
$ trail -> parent ( ' blog ' );
}
$ trail -> push ( $ category -> title , route ( ' category ' , $ category -> slug ));
});
兩者都會呈現如下:
{{ Breadcrumbs :: render ( ' category ' , $category ) } }
結果是這樣的:
首頁 / 部落格 / 祖父母類別 / 家長類別 / 類別標題
要自訂 HTML,請建立您自己的視圖文件,類似於以下內容:
{{-- resources/views/partials/breadcrumbs.blade.php --}}
@unless ( $breadcrumbs -> isEmpty () )
< ol class = " breadcrumb " >
@foreach ( $breadcrumbs as $breadcrumb )
@if ( ! is_null ( $breadcrumb -> url ) && ! $loop -> last )
< li class = " breadcrumb-item " >< a href = " {{ $breadcrumb -> url } } " > {{ $breadcrumb -> title } } </ a ></ li >
@else
< li class = " breadcrumb-item active " > {{ $breadcrumb -> title } } </ li >
@endif
@endforeach
</ ol >
@endunless
如果您想使用現有的內建模板,請執行以下命令:
php artisan vendor:publish --tag=breadcrumbs-views
這會將所有內建範本複製到專案中的resources/views/vendor/breadcrumbs/
目錄中,讓您可以直接進行編輯。
該視圖將收到一個名為$breadcrumbs
的集合。
每個麵包屑都是一個具有以下鍵的物件:
title
– 麵包屑標題url
– 麵包屑 URL,如果沒有給出則為null
$data
中每個項目的附加鍵(請參閱自訂資料)然後,使用自訂視圖名稱更新您的設定檔:
// config/breadcrumbs.php
' view ' => ' partials.breadcrumbs ' , // --> resources/views/partials/breadcrumbs.blade.php
或者,您可以跳過自訂視圖並呼叫Breadcrumbs::generate()
直接取得麵包屑集合:
@foreach ( Breadcrumbs :: generate ( ' post ' , $post ) as $breadcrumb )
{{-- ... --}}
@endforeach
在每個頁面的視圖中呼叫Breadcrumbs::render()
,並向其傳遞要使用的麵包屑的名稱以及任何其他參數。
{{ Breadcrumbs :: render ( ' home ' ) } }
或使用參數:
{{ Breadcrumbs :: render ( ' category ' , $category ) } }
要將麵包屑呈現為 JSON-LD 結構化資料(通常出於 SEO 原因),除了正常模板之外,還可以使用Breadcrumbs::view()
來呈現breadcrumbs::json-ld
模板。例如:
< html >
< head >
...
{{ Breadcrumbs :: view ( ' breadcrumbs::json-ld ' , ' category ' , $category ) } }
...
</ head >
< body >
...
{{ Breadcrumbs :: render ( ' category ' , $category ) } }
...
</ body >
</ html >
(注意:如果您使用 Laravel Page Speed,您可能需要停用TrimUrls
中間件。)
若要指定圖像,請將其新增至push()
中的$data
參數:
<?php // routes/breadcrumbs.php
use App Models Post ;
use Diglactic Breadcrumbs Breadcrumbs ;
use Diglactic Breadcrumbs Generator as BreadcrumbTrail ;
Breadcrumbs:: for ( ' post ' , function ( BreadcrumbTrail $ trail , Post $ post ) {
$ trail -> parent ( ' home ' );
$ trail -> push ( $ post -> title , route ( ' post ' , $ post ), [ ' image ' => asset ( $ post -> image )]);
});
(如果您喜歡使用 Microdata 或 RDFa,則需要建立自訂範本。)
在正常使用中,您必須呼叫Breadcrumbs::render($name, $params...)
在每個頁面上呈現麵包屑。如果您願意,您可以將麵包屑命名為與路線相同的名稱,並避免這種重複。
確保每條路線都有一個名稱。
<?php // routes/web.php
use Illuminate Support Facades Route ;
// Home
Route:: name ( ' home ' )-> get ( ' / ' , ' HomeController@index ' );
// Home > [Post]
Route:: name ( ' post ' )-> get ( ' /post/{id} ' , ' PostController@show ' );
有關更多詳細信息,請參閱 Laravel 文件中的命名路由。
對於每條路線,建立具有相同名稱和參數的麵包屑。例如:
<?php // routes/breadcrumbs.php
use App Models Post ;
use Diglactic Breadcrumbs Breadcrumbs ;
use Diglactic Breadcrumbs Generator as BreadcrumbTrail ;
// Home
Breadcrumbs:: for ( ' home ' , function ( BreadcrumbTrail $ trail ) {
$ trail -> push ( ' Home ' , route ( ' home ' ));
});
// Home > [Post]
Breadcrumbs:: for ( ' post ' , function ( BreadcrumbTrail $ trail , Post $ post ) {
$ trail -> parent ( ' home ' );
$ trail -> push ( $ post -> title , route ( ' post ' , $ post ));
});
若要將麵包屑新增至自訂 404 Not Found 頁面,請使用名稱errors.404
:
Breadcrumbs:: for ( ' errors.404 ' , function ( BreadcrumbTrail $ trail ) {
$ trail -> parent ( ' home ' );
$ trail -> push ( ' Page Not Found ' );
});
在佈局檔中呼叫不帶參數的Breadcrumbs::render()
{{-- resources/views/app.blade.php --}}
{{ Breadcrumbs :: render () } }
這將自動輸出與當前路線相對應的麵包屑。這也適用於Breadcrumbs::generate()
和Breadcrumbs::view()
:
如果麵包屑不存在,我們將拋出InvalidBreadcrumbException
,以提醒您創建麵包屑。若要停用此功能(例如,如果您的某些頁面沒有麵包屑),請先初始化設定檔(如果尚未初始化):
php artisan vendor:publish --tag=breadcrumbs-config
然後打開新建立的文件並設定該值:
// config/breadcrumbs.php
' missing-route-bound-breadcrumb-exception ' => false,
同樣,為了防止當前路由沒有名稱時拋出UnnamedRouteException
,請設定以下值:
// config/breadcrumbs.php
' unnamed-route-exception ' => false,
Laravel Breadcrumbs 使用與控制器相同的模型綁定。例如:
<?php // routes/web.php
use Illuminate Support Facades Route ;
Route:: name ( ' post ' )-> get ( ' /post/{post} ' , ' PostController@show ' );
<?php // app/Http/Controllers/PostController.php
use App Http Controllers Controller ;
use App Models Post ;
use Illuminate Contracts View View ;
class PostController extends Controller
{
public function show ( Post $ post ): View // <-- Route bound model is injected here
{
return view ( ' post/show ' , [ ' post ' => $ post ]);
}
}
<?php // routes/breadcrumbs.php
use App Models Post ;
use Diglactic Breadcrumbs Breadcrumbs ;
use Diglactic Breadcrumbs Generator as BreadcrumbTrail ;
Breadcrumbs:: for ( ' post ' , function ( BreadcrumbTrail $ trail , Post $ post ) { // <-- The same Post model is injected here
$ trail -> parent ( ' home ' );
$ trail -> push ( $ post -> title , route ( ' post ' , $ post ));
});
透過僅從資料庫載入貼文一次,您的程式碼將變得更加簡潔和有效率。
有關更多詳細信息,請參閱 Laravel 文件中的路由模型綁定。
Laravel 會自動為資源豐富的控制器建立路由名稱,例如photo.index
,您可以在定義麵包屑時使用它。例如:
<?php // routes/web.php
use App Http Controllers PhotoController ;
use Illuminate Support Facades Route ;
Route:: resource ( ' photo ' , PhotoController::class);
$ php artisan route:list
+--------+----------+--------------------+---------------+-------------------------+------------+
| Domain | Method | URI | Name | Action | Middleware |
+--------+----------+--------------------+---------------+-------------------------+------------+
| | GET|HEAD | photo | photo.index | PhotoController@index | |
| | GET|HEAD | photo/create | photo.create | PhotoController@create | |
| | POST | photo | photo.store | PhotoController@store | |
| | GET|HEAD | photo/{photo} | photo.show | PhotoController@show | |
| | GET|HEAD | photo/{photo}/edit | photo.edit | PhotoController@edit | |
| | PUT | photo/{photo} | photo.update | PhotoController@update | |
| | PATCH | photo/{photo} | | PhotoController@update | |
| | DELETE | photo/{photo} | photo.destroy | PhotoController@destroy | |
+--------+----------+--------------------+---------------+-------------------------+------------+
<?php // routes/breadcrumbs.php
use App Models Photo ;
use Diglactic Breadcrumbs Breadcrumbs ;
use Diglactic Breadcrumbs Generator as BreadcrumbTrail ;
// Photos
Breadcrumbs:: for ( ' photo.index ' , function ( BreadcrumbTrail $ trail ) {
$ trail -> parent ( ' home ' );
$ trail -> push ( ' Photos ' , route ( ' photo.index ' ));
});
// Photos > Upload Photo
Breadcrumbs:: for ( ' photo.create ' , function ( BreadcrumbTrail $ trail ) {
$ trail -> parent ( ' photo.index ' );
$ trail -> push ( ' Upload Photo ' , route ( ' photo.create ' ));
});
// Photos > [Photo Name]
Breadcrumbs:: for ( ' photo.show ' , function ( BreadcrumbTrail $ trail , Photo $ photo ) {
$ trail -> parent ( ' photo.index ' );
$ trail -> push ( $ photo -> title , route ( ' photo.show ' , $ photo ));
});
// Photos > [Photo Name] > Edit Photo
Breadcrumbs:: for ( ' photo.edit ' , function ( BreadcrumbTrail $ trail , Photo $ photo ) {
$ trail -> parent ( ' photo.show ' , $ photo );
$ trail -> push ( ' Edit Photo ' , route ( ' photo.edit ' , $ photo ));
});
有關更多詳細信息,請參閱 Laravel 文件中的資源控制器。
(相關常見問題:為什麼沒有 Breadcrumbs::resource() 方法?。)
push()
的第二個參數是可選的,因此如果您想要沒有 URL 的麵包屑,您可以執行以下操作:
$ trail -> push ( ' Sample ' );
在這種情況下, $breadcrumb->url
將為null
。
提供的預設 Bootstrap 模板使用「active」的 CSS 類別進行渲染,與最後一個麵包屑導航相同,因為否則它們預設為黑色文字而不是灰色,這看起來不正確。
push()
方法接受可選的第三個參數$data
– 要傳遞到麵包屑的任意關聯資料數組的數組,您可以在自訂模板中使用它。
例如,如果您希望每個麵包屑都有一個圖標,您可以這樣做:
$ trail -> push ( ' Home ' , ' / ' , [ ' icon ' => ' home.png ' ]);
$data
數組的條目將作為屬性合併到麵包屑中。
< li >
< a href = " {{ $breadcrumb -> url } } " >
< img src = " /images/icons/ {{ $breadcrumb -> icon } } " >
{{ $breadcrumb -> title } }
</ a >
</ li >
注意:不要使用鍵title
或url
,因為它們會被覆蓋。
您可以註冊“之前”和“之後”回調,以在路徑的開始/結束處添加麵包屑。例如,要在末尾自動新增目前頁碼:
<?php // routes/breadcrumbs.php
use Diglactic Breadcrumbs Breadcrumbs ;
use Diglactic Breadcrumbs Generator as BreadcrumbTrail ;
Breadcrumbs:: after ( function ( BreadcrumbTrail $ trail ) {
$ page = ( int ) request ( ' page ' , 1 );
if ( $ page > 1 ) {
$ trail -> push ( " Page { $ page }" );
}
});
若要取得目前頁面的最後一個麵包屑,請使用Breadcrumb::current()
。例如,您可以使用它來輸出當前頁面標題:
< title > {{ ( $breadcrumb = Breadcrumbs :: current ()) ? $breadcrumb -> title : ' Fallback Title ' } } </ title >
若要忽略麵包屑,請將'current' => false
加入push()
中的$data
參數。這對於忽略分頁麵包屑很有用:
<?php // routes/breadcrumbs.php
use Diglactic Breadcrumbs Breadcrumbs ;
use Diglactic Breadcrumbs Generator as BreadcrumbTrail ;
Breadcrumbs:: after ( function ( BreadcrumbTrail $ trail ) {
$ page = ( int ) request ( ' page ' , 1 );
if ( $ page > 1 ) {
$ trail -> push ( " Page { $ page }" , null , [ ' current ' => false ]);
}
});
< title >
{{ ( $breadcrumb = Breadcrumbs :: current ()) ? " $breadcrumb -> title – " : ' ' } }
{{ ( $page = ( int ) request ( ' page ' )) > 1 ? " Page $page – " : ' ' } }
Demo App
</ title >
對於更進階的過濾,請使用Breadcrumbs::generate()
和 Laravel 的 Collection 類別方法:
<?php
use Diglactic Breadcrumbs Breadcrumbs ;
$ current = Breadcrumbs:: generate ()-> where ( ' current ' , ' !== ' , false )-> last ();
您可以使用Breadcrumbs::view()
來取代Breadcrumbs::render()
來渲染預設模板以外的模板:
{{ Breadcrumbs :: view ( ' partials.breadcrumbs2 ' , ' category ' , $category ) } }
或者您可以覆寫配置設定以影響所有未來的render()
呼叫:
<?php
use Illuminate Support Facades Config ;
Config:: set ( ' breadcrumbs.view ' , ' partials.breadcrumbs2 ' );
{{ Breadcrumbs :: render ( ' category ' , $category ) } }
或者您可以呼叫Breadcrumbs::generate()
來取得 breadcrumbs Collection 並手動載入視圖:
@include ( ' partials.breadcrumbs2 ' , [ ' breadcrumbs ' => Breadcrumbs :: generate ( ' category ' , $category )] )
如果你呼叫不含參數Breadcrumbs::render()
或Breadcrumbs::generate()
,它將預設使用目前的路由名稱和參數(由 Laravel 的Route::current()
方法傳回)。
您可以透過呼叫Breadcrumbs::setCurrentRoute($name, $param1, $param2...)
來覆寫它。
要檢查給定名稱的麵包屑是否存在,請呼叫Breadcrumbs::exists('name')
,它會傳回一個布林值。
如果你不想使用routes/breadcrumbs.php
,你可以在設定檔中更改它。首先初始化設定檔(如果尚未初始化):
php artisan vendor:publish --tag=breadcrumbs-config
更新這一行:
// config/breadcrumbs.php
' files ' => base_path ( ' routes/breadcrumbs.php ' ),
它可以是絕對路徑(如上所述),也可以是陣列:
' files ' => [
base_path ( ' breadcrumbs/admin.php ' ),
base_path ( ' breadcrumbs/frontend.php ' ),
],
因此,您可以使用glob()
使用通配符自動尋找檔案:
' files ' => glob ( base_path ( ' breadcrumbs/*.php ' )),
或傳回一個空數組[]
以停用載入。
如果您要建立自己的包,只需從服務提供者的boot()
方法載入麵包屑檔案即可:
use Illuminate Support ServiceProvider ;
class MyServiceProvider extends ServiceProvider
{
public function boot (): void
{
if ( class_exists ( ' Breadcrumbs ' )) {
require __DIR__ . ' /breadcrumbs.php ' ;
}
}
}
如果您願意,可以使用依賴注入來存取Manager
實例,而不是使用Breadcrumbs::
Facade:
<?php
use Diglactic Breadcrumbs Manager ;
use Illuminate Support ServiceProvider ;
class MyServiceProvider extends ServiceProvider
{
public function boot ( Manager $ breadcrumbs ): void
{
$ breadcrumbs -> for (...);
}
}
麵包屑Manager
類別是可巨集的,因此您可以新增自己的方法。例如:
<?php
use Diglactic Breadcrumbs Breadcrumbs ;
Breadcrumbs:: macro ( ' pageTitle ' , function () {
$ title = ( $ breadcrumb = Breadcrumbs:: current ()) ? "{ $ breadcrumb -> title } – " : '' ;
if (( $ page = ( int ) request ( ' page ' )) > 1 ) {
$ title .= " Page $ page – " ;
}
return "{ $ title } - Demo App " ;
});
< title > {{ Breadcrumbs :: pageTitle () } } </ title >
對於更進階的自訂,您可以子類化BreadcrumbsManager
和/或BreadcrumbsGenerator
,然後使用新的類別名稱更新設定檔:
// breadcrumbs/config.php
' manager-class ' => Diglactic Breadcrumbs Manager::class,
' generator-class ' => Diglactic Breadcrumbs Generator::class,
注意:配置語法可能會在版本之間發生變化。
Breadcrumbs::resource()
方法?有一些人建議添加Breadcrumbs::resource()
來匹配Route::resource()
,但沒有人想出一個好的實現:a) 足夠靈活來處理翻譯、嵌套資源等,b) )因此並不太複雜。
您始終可以使用Breadcrumbs::macro()
來創建自己的麵包屑。這是一個很好的起點:
<?php // routes/breadcrumbs.php
use App Models SomeModel ;
use Diglactic Breadcrumbs Breadcrumbs ;
use Diglactic Breadcrumbs Generator as BreadcrumbTrail ;
Breadcrumbs:: macro ( ' resource ' , function ( string $ name , string $ title ) {
// Home > Blog
Breadcrumbs:: for ( "{ $ name } .index " , function ( BreadcrumbTrail $ trail ) use ( $ name , $ title ) {
$ trail -> parent ( ' home ' );
$ trail -> push ( $ title , route ( "{ $ name } .index " ));
});
// Home > Blog > New
Breadcrumbs:: for ( "{ $ name } .create " , function ( BreadcrumbTrail $ trail ) use ( $ name ) {
$ trail -> parent ( "{ $ name } .index " );
$ trail -> push ( ' New ' , route ( "{ $ name } .create " ));
});
// Home > Blog > Post 123
Breadcrumbs:: for ( "{ $ name } .show " , function ( BreadcrumbTrail $ trail , SomeModel $ model ) use ( $ name ) {
$ trail -> parent ( "{ $ name } .index " );
$ trail -> push ( $ model -> title , route ( "{ $ name } .show " , $ model ));
});
// Home > Blog > Post 123 > Edit
Breadcrumbs:: for ( "{ $ name } .edit " , function ( BreadcrumbTrail $ trail , SomeModel $ model ) use ( $ name ) {
$ trail -> parent ( "{ $ name } .show " , $ model );
$ trail -> push ( ' Edit ' , route ( "{ $ name } .edit " , $ model ));
});
});
Breadcrumbs:: resource ( ' blog ' , ' Blog ' );
Breadcrumbs:: resource ( ' photos ' , ' Photos ' );
Breadcrumbs:: resource ( ' users ' , ' Users ' );
請注意,這不涉及翻譯或嵌套資源,並且它假設所有模型都有title
屬性(使用者可能沒有)。按照您認為合適的方式進行調整。
composer update diglactic/laravel-breadcrumbs
進行升級。php artisan package:discover
以確保 Laravel 偵測到服務提供者。 routes/breadcrumbs.php
)。dd(__FILE__)
放入檔案中以確保它已載入。dd($files)
放入ServiceProvider::registerBreadcrumbs()
以檢查路徑是否正確。php artisan config:clear
(或手動刪除bootstrap/cache/config.php
)或更新config/breadcrumbs.php
中的路徑。missing-route-bound-breadcrumb-exception
設定為false
以停用檢查(但如果您錯過任何頁面,則不會收到警告)。 php artisan config:clear
(或手動刪除bootstrap/cache/config.php
)或更新config/breadcrumbs.php
中的路徑。 {{ Breadcrumbs::render() }}
或{{ Breadcrumbs::view() }}
,而不是@include()
。 文檔:如果您認為可以以任何方式改進文檔,請編輯此文件並提出拉取請求。
錯誤修復:請修復它並打開拉取請求。 (有關更詳細的說明,請參閱下文。)如果您添加單元測試以確保它不會再次發生,則會獲得獎勵積分!
新功能:只有具有明確用例和經過深思熟慮的 API 的功能才會被接受。它們必須記錄在案並包括單元測試。如果有疑問,請進行概念驗證(程式碼或文件)並開啟拉取請求以討論詳細資訊。 (提示:如果您希望預設包含的功能過於具體,請參閱巨集或進階用法以了解新增它們的方法。)
使用 Laravel Breadcrumbs 最簡單的方法是使用--prefer-source
標誌告訴 Composer 從原始碼 (Git) 安裝它:
rm -rf vendor/diglactic/laravel-breadcrumbs
composer install --prefer-source
然後簽出主分支並建立您自己的本地分支來處理:
cd vendor/diglactic/laravel-breadcrumbs
git checkout -t origin/main
git checkout -b YOUR_BRANCH
現在進行更改,包括單元測試和文件(如果適用)。執行單元測試以確保一切仍然正常運作:
vendor/bin/phpunit
然後提交更改。如果尚未在 GitHub 上分叉儲存庫,請將變更推送到其中:
git remote add YOUR_USERNAME [email protected]:YOUR_USERNAME/laravel-breadcrumbs.git
git push -u YOUR_USERNAME YOUR_BRANCH
最後,瀏覽到 GitHub 上的儲存庫並建立拉取請求。
要在專案中使用您自己的 fork,請更新主專案中的composer.json
,如下所示:
{
// ADD THIS:
"repositories" : [
{
"type" : "vcs" ,
"url" : "https://github.com/YOUR_USERNAME/laravel-breadcrumbs.git"
}
] ,
"require" : {
// UPDATE THIS:
"diglactic/laravel-breadcrumbs" : "dev-YOUR_BRANCH"
}
}
將YOUR_USERNAME
替換為您的 GitHub 使用者名,將YOUR_BRANCH
替換為分支名稱(例如develop
)。這告訴 Composer 使用您的儲存庫而不是預設的儲存庫。
要運行單元測試:
vendor/bin/phpunit
要執行單元測試並重建快照:
vendor/bin/phpunit -d --update-snapshots
檢查程式碼覆蓋率:
vendor/bin/phpunit --coverage-html test-coverage
然後開啟test-coverage/index.html
查看結果。請注意 PHPUnit 中的邊緣情況,這些情況可能會使其不太準確。
需要更新以下檔案才能針對新的 Laravel 版本執行測試:
composer.json
laravel/framework
(Laravel 版本)php
(最低 PHP 版本) tests.yml
jobs.phpunit.strategy.matrix.laravel
(Laravel 版本)jobs.phpunit.strategy.matrix.php
(PHP 版本)jobs.phpunit.strategy.matrix.exclude
(不支援的組合)以及根據需要提供以下文件:
README.md
UPGRADE.md
Laravel Breadcrumbs 是根據 MIT 許可證授權的開源軟體。