본문 바로가기
← 패키지 목록

Breadcrumbs

인증된 제출자

tabuna/breadcrumbs

제출자 이우진
최신 v5.0.0라이센스 MIT배포 2026년 10월 4일

Laravel 앱에 브레드크럼을 손쉽게 추가할 수 있습니다.

Laravel Breadcrumbs

Tests codecov Total Downloads Latest Version on Packagist

소개

브레드크럼은 사이트 전체 계층에서 현재 페이지의 위치를 링크 목록으로 보여 줍니다. 예를 들어 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)를 따릅니다. 자세한 내용은 라이선스 파일을 참고하세요.