chamber-orchestra/breadcrumbs

Lightweight, iterable breadcrumb collection for Symfony 8 applications

Maintainers

👁 wtorsi

Package info

github.com/chamber-orchestra/breadcrumbs

pkg:composer/chamber-orchestra/breadcrumbs

Statistics

Installs: 1 877

Dependents: 1

Suggesters: 0

Stars: 1

Open Issues: 1

v8.0.3 2026-02-16 19:44 UTC

Requires

Suggests

None

Provides

None

Conflicts

None

Replaces

None

This package is auto-updated.

Last update: 2026-06-22 04:54:00 UTC


README

👁 PHP Composer
👁 PHP CS Fixer
👁 Code Style: PER-CS
👁 Code Style: Symfony
👁 PHPStan Level max
👁 PHP 8.5
👁 Symfony 8.0
👁 Latest Stable Version
👁 License

Breadcrumbs

A lightweight, iterable breadcrumb collection for Symfony applications. Implements ArrayAccess, Iterator, and Countable for seamless integration with Twig templates and controllers.

Part of the Chamber Orchestra ecosystem.

Requirements

  • PHP ^8.5
  • Symfony HttpFoundation ^8.0

Installation

composer require chamber-orchestra/breadcrumbs

Usage

Adding breadcrumbs manually

use ChamberOrchestra\Breadcrumbs\Breadcrumbs;

$breadcrumbs = new Breadcrumbs();
$breadcrumbs
 ->addCrumb('Home', 'app_home')
 ->addCrumb('Products', 'app_products', ['category' => 'books'])
 ->addCrumb('Current Page');

Adding from a Symfony Request

$breadcrumbs->addRequestCrumb('Current Page', $request);

Extracts _route and _route_params from the request attributes automatically.

Prepending a crumb

$breadcrumbs->addCrumb('Home', 'app_home', [], prepend: true);

Using a closure

$breadcrumbs->addCrumbsClosure(function (Breadcrumbs $crumbs) {
 $crumbs->addCrumb('Home', 'app_home');
 $crumbs->addCrumb('About', 'app_about');
});

Iterating in Twig

<nav aria-label="breadcrumb">
 <ol>
 {% for crumb in breadcrumbs %}
 <li>
 {% if crumb.route %}
 <a href="{{ path(crumb.route, crumb.routeParams) }}">{{ crumb.name }}</a>
 {% else %}
 {{ crumb.name }}
 {% endif %}
 </li>
 {% endfor %}
 </ol>
</nav>

Array access

$first = $breadcrumbs[0];
$total = count($breadcrumbs);

License

MIT