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
– ブートストラップ 5breadcrumbs::bootstrap4
– ブートストラップ 4breadcrumbs::bulma
– ブルマbreadcrumbs::foundation6
– Foundation 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 ));
});
これにより、データベースから投稿を 1 回ロードするだけで、コードの冗長性が減り、より効率的になります。
詳細については、Laravel ドキュメントの「Route Model Binding」を参照してください。
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 ドキュメントの「リソース コントローラー」を参照してください。
(関連 FAQ: Breadcrumbs::resource() メソッドがないのはなぜですか?)
push()
の 2 番目のパラメータはオプションなので、URL のないパンくずリストが必要な場合は、次のようにすることができます。
$ trail -> push ( ' Sample ' );
この場合、 $breadcrumb->url
null
になります。
提供されているデフォルトのブートストラップ テンプレートは、これを最後のブレッドクラムと同じ「アクティブ」の CSS クラスでレンダリングします。それ以外の場合は、デフォルトでグレーではなく黒のテキストが表示され、見た目が正しくありません。
push()
メソッドは、オプションの 3 番目のパラメーターである$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 >
ブレッドクラムを無視するには、 push()
の$data
パラメータに'current' => false
を追加します。これは、ページネーションのブレッドクラムを無視するのに役立ちます。
<?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:: Breadcrumbs::render()
Breadcrumbs::view()
を使用して、デフォルト以外のテンプレートをレンダリングできます。
{{ 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()
を呼び出してブレッドクラム コレクションを取得し、ビューを手動でロードすることもできます。
@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 ' ;
}
}
}
必要に応じて、 Breadcrumbs::
ファサードを使用する代わりに、依存関係の注入を使用してManager
インスタンスにアクセスできます。
<?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()
メソッドがないのはなぜですか? Route::resource()
Breadcrumbs::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__)
を入力して、ファイルがロードされていることを確認してください。ServiceProvider::registerBreadcrumbs()
にdd($files)
を入れて、パスが正しいことを確認してみてください。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
のパスを更新してみてください。 @include()
ではなく、 {{ Breadcrumbs::render() }}
または{{ Breadcrumbs::view() }}
を使用してください。 ドキュメント:ドキュメントを何らかの方法で改善できると思われる場合は、このファイルを編集してプル リクエストを行ってください。
バグ修正:修正してプルリクエストを開いてください。 (詳細な手順については、以下を参照してください。) 単体テストを追加して、同じことが再び起こらないことを確認すると、ボーナス ポイントが得られます。
新機能:明確なユースケースとよく検討された API を持つ機能のみが受け入れられます。それらは文書化され、単体テストが含まれている必要があります。疑問がある場合は、概念実証 (コードまたはドキュメント) を作成し、プル リクエストを開いて詳細について話し合います。 (ヒント: デフォルトでは含められないほど特殊な機能が必要な場合は、「マクロ」または「高度な使用法」で追加方法を参照してください。)
Laravel ブレッドクラムを操作する最も簡単な方法は、 --prefer-source
フラグを使用してソース (Git) からインストールするように Composer に指示することです。
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 上のリポジトリを参照して、プル リクエストを作成します。
プロジェクトで独自のフォークを使用するには、メイン プロジェクトの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 ライセンスに基づいてライセンス供与されたオープンソース ソフトウェアです。