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

Linkbundle Laravel Package

edemy/linkbundle

View on GitHub
Deep Wiki
Context7

Getting Started

Minimal Setup

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

    composer require masando/edemy-linkbundle
    

    Register the bundle in config/bundles.php:

    return [
        // ...
        Masando\eDemyLinkBundle\eDemyLinkBundle::class => ['all' => true],
    ];
    
  2. First Use Case Generate a link in a controller or template:

    use Masando\eDemyLinkBundle\LinkGenerator;
    
    $link = $this->get('link_generator')->generate('route_name', ['param' => 'value']);
    

    Or in Twig:

    {{ path('route_name', {'param': 'value'}) }}
    
  3. Key Files

    • src/Masando/eDemyLinkBundle/Resources/config/services.yml (Service definitions)
    • src/Masando/eDemyLinkBundle/LinkGenerator.php (Core logic)

Implementation Patterns

Common Workflows

  1. Route-Based Link Generation

    // Controller
    $url = $this->get('link_generator')->generate('app_homepage');
    
  2. Dynamic Route Parameters

    $url = $this->get('link_generator')->generate('product_show', [
        'slug' => $product->slug,
        'id' => $product->id
    ]);
    
  3. Twig Integration

    {# Default route #}
    <a href="{{ path('route_name') }}">Link</a>
    
    {# With parameters #}
    <a href="{{ path('route_name', {'id': product.id}) }}">Link</a>
    
  4. Link Generation in Forms

    <form action="{{ path('product_update', {'id': product.id}) }}" method="POST">
        {{ form_widget(form) }}
    </form>
    

Advanced Patterns

  1. Custom Link Types Extend LinkGenerator to support non-route links (e.g., external URLs):

    class CustomLinkGenerator extends LinkGenerator {
        public function generateExternal($url) {
            return $this->urlGenerator->generate($url);
        }
    }
    
  2. Link Validation

    if ($this->get('link_generator')->isValidRoute('route_name')) {
        // Safe to generate
    }
    
  3. Link Caching Cache generated links in a service:

    $cacheKey = 'link_route_name_' . md5(serialize($params));
    $url = $this->get('cache')->get($cacheKey, function() use ($params) {
        return $this->get('link_generator')->generate('route_name', $params);
    });
    

Gotchas and Tips

Common Pitfalls

  1. Route Existence

    • Issue: generate() throws RouteNotFoundException if the route doesn’t exist.
    • Fix: Validate routes first or wrap in a try-catch:
      try {
          $url = $this->get('link_generator')->generate('route_name');
      } catch (\InvalidArgumentException $e) {
          $url = '#'; // Fallback
      }
      
  2. Parameter Mismatch

    • Issue: Extra/missing parameters cause InvalidArgumentException.
    • Fix: Use route() helper in Twig for stricter validation:
      {% if 'route_name' is route %}
          <a href="{{ path('route_name', {'id': product.id}) }}">Link</a>
      {% endif %}
      
  3. Twig vs. PHP Context

    • Issue: Twig’s path() uses Symfony’s UrlGenerator, not the bundle’s LinkGenerator.
    • Fix: Inject LinkGenerator into Twig extensions for custom logic.

Debugging Tips

  1. Check Route Dump

    php bin/console debug:router
    

    Verify route names and required parameters.

  2. Enable Debug Mode Set APP_DEBUG=true in .env to see detailed exceptions.

  3. Log Generated Links

    $this->get('logger')->debug('Generated link', ['url' => $url]);
    

Extension Points

  1. Custom Link Generators Override LinkGenerator in a child bundle:

    # config/services.yml
    services:
        app.link_generator:
            class: AppBundle\Service\CustomLinkGenerator
            arguments: ['@router']
            tags: ['link_generator']
    
  2. Add Link Filters Extend LinkGenerator to modify URLs (e.g., add query strings):

    public function generate($route, $params = []) {
        $url = parent::generate($route, $params);
        return $url . '?utm_source=app';
    }
    
  3. Event Listeners Listen to kernel.request to log or modify links dynamically:

    public function onKernelRequest(GetResponseEvent $event) {
        $request = $event->getRequest();
        $this->get('logger')->info('Current link: ' . $request->getUri());
    }
    

Configuration Quirks

  1. Default Parameters Set global defaults in config/packages/edemy_link.yaml:

    edemy_link:
        defaults:
            _locale: '%locale%'
            _controller: 'App\Controller\DefaultController::index'
    
  2. Environment-Specific Routes Use %kernel.environment% in route parameters:

    # config/routes.yaml
    app_homepage:
        path: /
        defaults:
            _route: 'home_%env(DEFAULT::dev)%'
    
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.
anousss007/vigilance
supportpal/eloquent-model
ardenexal/fhir-models
laravel-at/laravel-image-sanitize
romalytar/yammi-audit-log-laravel
ardenexal/fhir-validation
arshaviras/weather-widget
laravel-chronicle/core
sunchayn/nimbus
daikazu/eloquent-salesforce-objects
unseen-codes/chat
romalytar/yammi-jobs-monitoring-laravel
kisame76/filament-db-table-state
nqxcode/laravel-lucene-search
dpfx/laravel-livewire-wizards
workos/workos-php-laravel
sofa/laravel-global-scope
nawasara/auth-primitives
adhocrat-io/arkhe-main
make-dev/orca-harpoon