/twig-injection-bundle

Allow to inject the twig templates through the event behavior

Primary LanguagePHPMIT LicenseMIT

TwigInjectionBundle

The TwigInjectionBundle allows to inject twig templates through the event behavior.

Installation

TwigInjectionBundle requires Symfony 2.8 or higher.

Require the bundle in your composer.json file:

{
    "require": {
        "intaro/twig-injection-bundle": "~1.0.0",
    }
}

Register the bundle in AppKernel:

// app/AppKernel.php

public function registerBundles()
{
    $bundles = array(
        //...

        new Intaro\TwigInjectionBundle\IntaroTwigInjectionBundle(),
    );

    //...
}

Install the bundle:

$ composer update intaro/twig-injection-bundle

Usage

  1. Add {{ inject() }} calling in template:
{{ inject('twig.injection.event.name', { parameter1: 'some-value', parameter2: some_object }) }}
  1. Prepare controller action which you want to render or template which you want to include.

  2. Define Listener which will inject include or render calling:

<?php

namespace Acme\DemoBundle\EventListener;

use Intaro\TwigInjectionBundle\Event\TwigInjectEvent;
use Intaro\TwigInjectionBundle\Event\TwigInjectRender;

class TwigInjectionListener
{
    public function onSomeEvent(TwigInjectEvent $event)
    {
        $parameters = $event->getParameters();

        if (!isset($parameters['parameter1']) || 'some-value' !== $parameters['parameters1']) {
            return;
        }

        $render = new TwigInjectRender(
            'AcmeDemoBundle:DefaultController:index',
            [ 'object' => $parameters['parameters2'] ]
        );
        $event->addInjection($render);

        $include = new TwigInjectInclude('AcmeDemoBundle:Default:someTemplate.html.twig');
        $event->addInjection($include);
    }
}
  1. Register the listener:
services:
    acme_demo.twig_injection.listener:
        class: Acme\DemoBundle\EventListener\TwigInjectionListener
        tags:
            - { name: kernel.event_listener, event: twig.injection.event.name, method: onSomeEvent }