Weave Code
Code Weaver
Helps Laravel developers discover, compare, and choose open-source packages. See popularity, security, maintainers, and scores at a glance to make better decisions.
Feedback
Share your thoughts, report bugs, or suggest improvements.
Subject
Message

Ccdn Component Crumb Trail Bundle Laravel Package

codeconsortium/ccdn-component-crumb-trail-bundle

View on GitHub
Deep Wiki
Context7

Getting Started

Minimal Setup

  1. Installation Add the bundle to your composer.json:

    composer require codeconsortium/ccdn-component-crumb-trail-bundle
    

    Register the bundle in config/bundles.php:

    return [
        // ...
        CodeConsortium\CCDNComponentCrumbTrailBundle\CodeConsortiumCCDNComponentCrumbTrailBundle::class => ['all' => true],
    ];
    
  2. Basic Usage Inject the crumb_trail service into your controller:

    use Symfony\Component\HttpKernel\Bundle\Bundle;
    use CodeConsortium\CCDNComponent\CrumbTrail\CrumbTrail;
    
    class DefaultController extends Controller
    {
        public function indexAction(CrumbTrail $crumbTrail)
        {
            $crumbTrail->addCrumb('Home', 'homepage');
            $crumbTrail->addCrumb('Products', 'products');
            $crumbTrail->addCrumb('Current Page', 'current_page');
    
            return $this->render('default/index.html.twig', [
                'crumbs' => $crumbTrail->getCrumbs()
            ]);
        }
    }
    
  3. Twig Integration In your Twig template, render the crumbs:

    {% for crumb in crumbs %}
        {% if loop.first %}
            <span>{{ crumb.label }}</span>
        {% else %}
            <a href="{{ path(crumb.route) }}">{{ crumb.label }}</a>
            {% if not loop.last %}<span class="divider">/</span>{% endif %}
        {% endif %}
    {% endfor %}
    

Implementation Patterns

Fluent Interface Workflow

Leverage the fluent interface for dynamic crumb building:

$crumbTrail
    ->addCrumb('Home', 'homepage')
    ->addCrumb('Category', 'category', ['id' => 123])
    ->addCrumb('Product', 'product', ['id' => 456], ['class' => 'active']);

Service-Based Integration

Use dependency injection for reusable crumb logic:

// services.yaml
services:
    App\Service\CrumbBuilder:
        arguments:
            $crumbTrail: '@crumb_trail'
        calls:
            - [buildAdminCrumbs, []]
            - [buildUserCrumbs, []]

// CrumbBuilder.php
class CrumbBuilder
{
    public function __construct(private CrumbTrail $crumbTrail) {}

    public function buildAdminCrumbs(): self
    {
        $this->crumbTrail->addCrumb('Admin', 'admin_dashboard');
        return $this;
    }
}

Dynamic Route Generation

Generate routes dynamically based on context:

$crumbTrail->addCrumb(
    'User Profile',
    'user_profile',
    ['username' => $user->username],
    ['icon' => 'user']
);

Twig Extensions

Extend Twig for concise crumb rendering:

// src/Twig/Extension/CrumbExtension.php
class CrumbExtension extends \Twig\Extension\AbstractExtension
{
    public function getFunctions()
    {
        return [
            new \Twig\TwigFunction('render_crumbs', [$this, 'renderCrumbs']),
        ];
    }

    public function renderCrumbs(CrumbTrail $crumbTrail)
    {
        // Custom rendering logic
    }
}

Gotchas and Tips

Compatibility Caveats

  • Symfony 2.1.x Only: Avoid using with newer Symfony versions (e.g., 3.x/4.x/5.x) without forking or wrapping.
  • Doctrine 2.1.x: No database dependency, but ensure your project aligns with Doctrine 2.1.x constraints.

Debugging Tips

  • Empty Crumbs: Verify the crumb_trail service is properly injected and crumbs are added before rendering.
  • Route Errors: Use dump($crumbTrail->getCrumbs()) to inspect routes and parameters for typos.
  • Twig Context: Ensure Twig has access to the crumbs variable or the crumb_trail service.

Configuration Quirks

  • No Built-in Config: The bundle relies on runtime additions; no config/packages/ccdn_crumb_trail.yaml exists.
  • Override Defaults: Extend the Crumb class or use decorators to modify behavior:
    // src/Service/CustomCrumb.php
    class CustomCrumb extends \CodeConsortium\CCDNComponent\CrumbTrail\Crumb
    {
        public function getHtmlAttributes(): array
        {
            $attrs = parent::getHtmlAttributes();
            $attrs['data-custom'] = 'value';
            return $attrs;
        }
    }
    

Extension Points

  • Custom Crumb Types: Implement CrumbInterface for specialized crumbs (e.g., dropdown menus).
  • Event Listeners: Attach to kernel.request to auto-populate crumbs:
    // src/EventListener/CrumbListener.php
    class CrumbListener
    {
        public function onKernelRequest(GetResponseEvent $event)
        {
            $request = $event->getRequest();
            $crumbTrail = $event->getContainer()->get('crumb_trail');
    
            if ($request->attributes->get('_route') === 'product_show') {
                $crumbTrail->addCrumb('Product', 'product_show', ['id' => $request->attributes->get('id')]);
            }
        }
    }
    

Performance

  • Avoid Overuse: Crumbs are rendered per-request; cache the CrumbTrail service if reused across requests.
  • Lazy Loading: Add crumbs only when needed (e.g., in controllers/actions) to minimize overhead.
Weaver

How can I help you explore Laravel packages today?

Conversation history is not saved when not logged in.
Prompt
Add packages to context
No packages found.
terminal42/code-quality-tools
codifyo/ts-generator-bundle
andydefer/laravel-cluster
testo/fiber
mintobit/jobqueue
a4sex/maintenance-bundle
a4sex/entity-date-update
a4sex/client-identifier
a4sex/base-utilites
a4sex/key-value-storage
a4sex/micro-status
chilldev/dependency-injection-extra
datinglibre/datinglibre-app-api
biberltd/corebundle
bricre/symfony-bundle-test
biberltd/logbundle
dominium/http-adapter-bundle
dominium/google-analytics
a4sex/auto-clean-entity
christhompsontldr/laravel-inky