Breadcrumbs
인증된 제출자tabuna/breadcrumbs
Laravel 앱에 브레드크럼을 손쉽게 추가할 수 있습니다.
소개
브레드크럼은 사이트 전체 계층에서 현재 페이지의 위치를 링크 목록으로 보여 줍니다. 예를 들어 Home / Sample Post / Edit는 사용자가 "Sample Post"의 편집 페이지를 보고 있다는 뜻입니다. "Sample Post"를 클릭하면 해당 글로, "Home"을 클릭하면 홈페이지로 이동합니다.
Home / Sample Post / Edit
이 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, $category is an Eloquent model instance.
// ...
})
->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.
*/
public function boot(): void
{
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.
*/
public function boot(): void
{
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="[
'foo' => 'Dashboard',
'baz' => 'Users',
'buzz' => 'Edit Profile'
]"
/>이름이 있는 라우트를 명시적으로 지정할 수도 있습니다.
<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출력 결과는 다음과 같습니다.
Home / About
제작 배경
개발자는 수년 동안 Dave James Miller의 패키지를 활용했지만, 해당 패키지의 개발과 지원이 중단되면서 대안을 찾았습니다. Dwight Watson의 패키지도 마음에 들었으나 브레드크럼과 라우트 선언이 분리된 점을 개선하고자 이 패키지를 만들었습니다. 이 패키지는 앞선 두 패키지의 코드를 활용합니다.
라이선스
MIT 라이선스(MIT)를 따릅니다. 자세한 내용은 라이선스 파일을 참고하세요.