Skip to content

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

Notifications You must be signed in to change notification settings

Cethy/ContentInjectorBundle

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

18 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Cethyworks\ContentInjectorBundle

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.

CircleCI

Install

composer require cethyworks/content-injector-bundle

AppKernel.php

class AppKernel extends Kernel
{
	registerBundles()
	{
		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 :

AppInjectJsType.php

class AppInjectJsType extends AbstractType
{
    public function configureOptions(OptionsResolver $resolver)
    {
        $resolver->setDefaults(array(
            '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;
    }
}

app_inject_js_type.html.twig

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

    // do something to your form
</script>

What's in the box ?

EventSubscriber

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

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

Commands

  • 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.

FormExtension

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

Enable the injector form option.

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

Factories

  • Cethyworks\ContentInjectorBundle\Command\Factory\TwigFormCommandFactory

Used internally by InjectorAwareTypeExtension, create TwigCommands aware of FormView.

Injectors

  • 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.

About

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

Resources

Stars

Watchers

Forks

Packages

No packages published