cethyworks/content-injector-bundle 问题修复 & 功能扩展

解决BUG、新增功能、兼容多环境部署,快速响应你的开发需求

邮箱:yvsm@zunyunkeji.com | QQ:316430983 | 微信:yvsm316

cethyworks/content-injector-bundle

最新稳定版本:v5.0

Composer 安装命令:

composer require cethyworks/content-injector-bundle

包简介

Allow content injection before the app send the response to the client.

README 文档

README

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.

统计信息

  • 总下载量: 11.26k
  • 月度下载量: 0
  • 日度下载量: 0
  • 收藏数: 3
  • 点击次数: 0
  • 依赖项目数: 3
  • 推荐数: 0

GitHub 信息

  • Stars: 3
  • Watchers: 2
  • Forks: 6
  • 开发语言: PHP

其他信息

  • 授权协议: MIT
  • 更新时间: 2017-07-06