Allow to inject the twig templates through the event behavior
Switch branches/tags
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Failed to load latest commit information.
DependencyInjection
Event
Resources/config
Twig
.gitignore
IntaroTwigInjectionBundle.php
LICENSE
README.md
composer.json

README.md

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 }