happyr/blaze-bundle

Write down your routing mapping at one place


Keywords
route, routing, dynamic, blaze
License
MIT

Documentation

Happyr BlazeBundle

Latest Version Build Status Code Coverage Quality Score Total Downloads

This bundle lets you configure dynamic routes. A piece of code explains the benefit:

// Generate the path /blog-post/{post_id}/comment/{comment_id}/edit
<a href="{{ path('edit_comment', {'comment_id':comment.id, 'post_id':comment.post.id}) }}">Click here</a>
<a href="{{ comment|blaze('edit') }}">Click here</a>

Installation

Step 1: Using Composer

$ composer require happyr/blaze-bundle

Step 2: Register the bundle

To register the bundles with your kernel:

// in AppKernel::registerBundles()
$bundles = array(
    // ...
    new Happyr\BlazeBundle\HappyrBlazeBundle(),
    // ...
);

Step 3: Configure the bundle

# app/config/config.yml

happyr_blaze:
  objects:
    Acme\DemoBundle\Entity\Foo:
      edit:
        route: 'foo_edit'
        parameters: {id:'getId'}
      show:
        route: 'foo_show'
        parameters: {id:'getId'}

    Acme\DemoBundle\Entity\Bar:
      show:
        route: 'bar_show'
        parameters: {id:'getId'}

    Acme\DemoBundle\Entity\Baz:
      anything:
        route: 'baz_show'
        parameters: {id:'getId', foo_id:'getFoo.getId'}

    #if you need support for routes where the objects have no relation:
    Acme\DemoBundle\Entity\FooBar:
      manage:
        route: 'foobar_manage'
        parameters: [{id: 'getId'}, {baz_id: 'getId', baz_name: 'getName'}, {bazbar_id: 'getSlug'}]
        complementaryObjects: ["Acme\DemoBundle\Entity\Baz", "Acme\DemoBundle\Entity\BazBar"]

Usage

Twig

{# foo is a Foo object #}
<a href="{{ foo|blaze('show') }}">Show Foo</a>

{# baz is a Baz object #}
<a href="{{ baz|blaze('anything') }}">Show Baz</a>

{# and the multiple objects .. #}
<a href="{{ [foobar,baz,bazbar]|blaze('manage') }}">Show Baz</a>

PHP

use Happyr\BlazeBundle\Service\BlazeManagerInterface;

class MyController
{
    private $blaze;
    public function __construct(BlazeManagerInterface $blaze) {
        $this->blaze = $blaze;
    }

    public function SomeAction() {
        $blaze = $this->get(BlazeManagerInterface::class);

        $showUrl = $blaze->getPath($foo, 'show');
        $manageUrl = $blaze->getPath($foobar, 'show', array($baz, $bazbar));

        // ...
    }
}