Cethy / ContentInjectorBundle

[NOT MAINTAINED] Allow content injection before the app send the response to the client.

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool


Allow effective content injection before the app sends the response to the client.

It uses a global subscriber which will inject content from collected InjectorCommands when kernel.response event is fired. The InjectorCommands can be a simple callable returning a string or be as complex as a rendered twig template with data.

The bundle provides helpers to inject simple text, twig templates and FormView aware commands.



composer require cethyworks/content-injector-bundle


class AppKernel extends Kernel
		return [
			// ...
			new Cethyworks\ContentInjectorBundle\CethyworksContentInjectorBundle()

How to use

The global subscriber is configured out of the box.

You just need to register one or more InjectorCommand :

$subscriber = $container->get(ContentInjectorSubscriber::class);
$subscriber->regiterCommand(function(){ return 'inject_me'; });

With twig template

$commandHandler = $container->get(TwigCommandHandler::class);
$commandHandler->registerCommand('@AppBundle\Resources/assets/twig/foo.html.twig', ['foo' => 'bar']);

With FormType

The bundle provides a TypeExtension "extending" FormType (virtually all forms) adding a injector option allowing the configuration of an injector aware of the FormType's FormView. It ca be used like this :


class AppInjectJsType extends AbstractType
    public function configureOptions(OptionsResolver $resolver)
            'injector' => [ 
            	'template' => '@AppBundle/Resources/assets/twig/app_inject_js_type.html.twig' ]

    public function getBlockPrefix()
        return 'my_form_id';

    public function getParent()
        return EntityType::class;


    var formId = "{{ form_view.vars['id'] }}";

    // do something to your form

What's in the box ?


  • Cethyworks\ContentInjectorBundle\EventSubscriber\ContentInjectorSubscriber($injector)

Collects InjectorCommands, execute and inject them into the Response when kernel.response event is fired.


  • Cethyworks\ContentInjectorBundle\Command\CommandInterface

Command interface.

  • Cethyworks\ContentInjectorBundle\Command\TextCommand($text)

Simple Text Command.

  • Cethyworks\ContentInjectorBundle\Command\TwigCommand($twig)->setTemplate($template)->setData($data)

Twig Command, render $template with $data.


  • Cethyworks\ContentInjectorBundle\Form\Extension\InjectorAwareTypeExtension($commandFactory, $responseSubscriber)

Enable the injector form option.

@see section How to / With Form" ""Type above.


  • Cethyworks\ContentInjectorBundle\Command\Factory\TwigFormCommandFactory

Used internally by InjectorAwareTypeExtension, create TwigCommands aware of FormView.


  • Cethyworks\ContentInjectorBundle\Injector\InjectorInterface

Injector interface.

  • Cethyworks\ContentInjectorBundle\Injector\BodyEndInjector

Injects just before </body> tag.

Test helper

  • Cethyworks\ContentInjectorBundle\Test\InjectorTypeTestCase

Command Handler

  • Cethyworks\ContentInjectorBundle\Command\Handler\TwigCommandHandler

Shorcut service to create & register a TwigCommand.

Extends TypeTestCase and initialize the InjectorAwareTypeExtension extension.


[NOT MAINTAINED] Allow content injection before the app send the response to the client.


Language:PHP 99.7%Language:HTML 0.3%