이동 경로를 생성하는 간단한 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 – Bulmabreadcrumbs::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 Model이지만 무엇이든 될 수 있음)는 뷰에서 전달됩니다.
{{ 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 )]);
});(마이크로데이터 또는 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 찾을 수 없음 페이지에 이동 경로를 추가하려면 errors.404 이름을 사용하십시오.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 문서의 리소스 컨트롤러를 참조하세요.
(관련 FAQ: Breadcrumbs::resource() 메소드가 없는 이유는 무엇입니까?)
push() 의 두 번째 매개변수는 선택사항이므로 URL이 없는 탐색경로를 원하는 경우 다음을 수행할 수 있습니다.
$ trail -> push ( ' Sample ' ); 이 경우 $breadcrumb->url null 이 됩니다.
제공된 기본 부트스트랩 템플릿은 마지막 탐색경로와 동일한 "활성" 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 > 탐색경로를 무시하려면 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() 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 실행해 보세요. 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 Breadcrumbs에서 작업하는 가장 쉬운 방법은 Composer에게 --prefer-source 플래그를 사용하여 소스(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의 리포지토리를 찾아 풀 요청을 생성합니다.
프로젝트에서 자체 포크를 사용하려면 다음과 같이 기본 프로젝트에서 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 라이선스에 따라 라이선스가 부여된 오픈 소스 소프트웨어입니다.