shapecode / twig-template-event-bundle
动态在 twig 模板中添加代码的可能性
5.0.0
2023-12-03 12:18 UTC
Requires
- php: ^8.2
- symfony/config: ^6.4 || ^7.0
- symfony/dependency-injection: ^6.4 || ^7.0
- symfony/event-dispatcher: ^6.4 || ^7.0
- symfony/event-dispatcher-contracts: ^2.0 || ^3.0
- symfony/framework-bundle: ^6.4 || ^7.0
- symfony/http-foundation: ^6.4 || ^7.0
- symfony/http-kernel: ^6.4 || ^7.0
- symfony/yaml: ^6.4 || ^7.0
- twig/twig: ^3.8
Requires (Dev)
- dg/bypass-finals: ^1.5
- doctrine/coding-standard: ^12.0
- icanhazstring/composer-unused: ^0.8
- maglnet/composer-require-checker: ^4.7
- phpstan/phpstan: ^1.10
- phpstan/phpstan-deprecation-rules: ^1.1
- phpstan/phpstan-phpunit: ^1.3
- phpstan/phpstan-strict-rules: ^1.5
- phpunit/phpunit: ^10.5
- roave/security-advisories: dev-master
- squizlabs/php_codesniffer: ^3.7
- symfony/var-dumper: ^7.0
README
为您提供在 twig 模板中动态添加代码的可能性。
安装说明
首先您需要将 shapecode/twig-template-event-bundle
添加到 composer.json
composer require shapecode/twig-template-event-bundle
... 或者 ...
{ "require": { "shapecode/twig-template-event-bundle": "~5.0" } }
如果您不使用 Symfony Flex,您需要将 ShapecodeTwigTemplateEventBundle
添加到您的 bundles.php
<?php // config/bundles.php return [ // ... Shapecode\Bundle\TwigTemplateEventBundle\ShapecodeTwigTemplateEventBundle::class => ['all' => true], ];
现在您可以在 twig 模板中设置事件
{{ event('test') }}
并通过事件监听器来监听它们
services: # twig events Shapecode\Bundle\TwigTemplateEventBundle\EventListener\TestTwigEventListener: ~
<?php namespace Shapecode\Bundle\TwigTemplateEventBundle\EventListener; use Shapecode\Bundle\TwigTemplateEventBundle\Event\Code\TwigEventString; use Shapecode\Bundle\TwigTemplateEventBundle\Event\Code\TwigEventInclude; use Shapecode\Bundle\TwigTemplateEventBundle\Event\TwigTemplateEvent; use Symfony\Component\EventDispatcher\Attribute\AsEventListener; #[AsEventListener] class TestTwigEventListener { public function __invoke(TwigTemplateEvent $event): void { if ($event->getEventName() == 'foo') { // to add a string $event->addCode( new TwigEventString( 'hello {{ world }}', [ 'world' => 'World' ], 10 // default is 0. The higher the number the later the code will be executed. The lower the number the earlier the code will be executed. ) ); } if ($event->getEventName() == 'bar') { // to include a twig template $event->addCode( new TwigEventInclude( '@App/Layout/Header/_search.html.twig', [ 'world' => 'World' ], ) ); } } }