-<?php
-// src/Rapsys/PackBundle/Twig/PackExtension.php
-namespace Rapsys\PackBundle\Twig;
+<?php declare(strict_types=1);
-use Symfony\Component\HttpKernel\Config\FileLocator;
-use Symfony\Component\DependencyInjection\ContainerInterface;
-use Symfony\Component\Asset\PackageInterface;
-use Twig\Extension\AbstractExtension;
-
-class PackExtension extends AbstractExtension {
- //The config
- private $config;
+/*
+ * This file is part of the Rapsys PackBundle package.
+ *
+ * (c) Raphaël Gertz <symfony@rapsys.eu>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
- //The output
- private $output;
+namespace Rapsys\PackBundle\Extension;
- //The filter
- private $filters;
-
- //The file locator
- protected $locator;
-
- //The assets package
- protected $package;
-
- public function __construct(FileLocator $locator, ContainerInterface $container, PackageInterface $package) {
- //Set file locator
- $this->locator = $locator;
+use Symfony\Component\Asset\PackageInterface;
+use Symfony\Component\DependencyInjection\ContainerInterface;
+use Symfony\Component\HttpKernel\Config\FileLocator;
+use Twig\Extension\AbstractExtension;
- //Set assets packages
- $this->package = $package;
+use Rapsys\PackBundle\Parser\TokenParser;
+use Rapsys\PackBundle\RapsysPackBundle;
+use Rapsys\PackBundle\Util\IntlUtil;
+use Rapsys\PackBundle\Util\SluggerUtil;
- //Retrieve bundle config
- if ($parameters = $container->getParameter($this->getAlias())) {
- //Set config, output and filters arrays
- foreach(['config', 'output', 'filters'] as $k) {
- $this->$k = $parameters[$k];
- }
- }
+/**
+ * {@inheritdoc}
+ */
+class PackExtension extends AbstractExtension {
+ /**
+ * @link https://twig.symfony.com/doc/2.x/advanced.html
+ *
+ * {@inheritdoc}
+ */
+ public function __construct(protected ContainerInterface $container, protected IntlUtil $intl, protected FileLocator $locator, protected PackageInterface $package, protected SluggerUtil $slugger, protected array $parameters) {
}
- public function getTokenParsers() {
+ /**
+ * Returns a filter array to add to the existing list.
+ *
+ * @return \Twig\TwigFilter[]
+ */
+ public function getTokenParsers(): array {
return [
- new PackTokenParser($this->locator, $this->package, $this->config, 'stylesheet', $this->output['css'], $this->filters['css']),
- new PackTokenParser($this->locator, $this->package, $this->config, 'javascript', $this->output['js'], $this->filters['js']),
- new PackTokenParser($this->locator, $this->package, $this->config, 'image', $this->output['img'], $this->filters['img'])
+ new TokenParser($this->locator, $this->package, $this->parameters['token'], 'stylesheet', $this->parameters['output']['css'], $this->parameters['filters']['css']),
+ new TokenParser($this->locator, $this->package, $this->parameters['token'], 'javascript', $this->parameters['output']['js'], $this->parameters['filters']['js']),
+ new TokenParser($this->locator, $this->package, $this->parameters['token'], 'image', $this->parameters['output']['img'], $this->parameters['filters']['img'])
];
}
/**
- * {@inheritdoc}
+ * Returns a filter array to add to the existing list.
+ *
+ * @return \Twig\TwigFilter[]
*/
- public function getAlias() {
- return 'rapsys_pack';
+ public function getFilters(): array {
+ return [
+ new \Twig\TwigFilter('lcfirst', 'lcfirst'),
+ new \Twig\TwigFilter('ucfirst', 'ucfirst'),
+ new \Twig\TwigFilter('hash', [$this->slugger, 'hash']),
+ new \Twig\TwigFilter('unshort', [$this->slugger, 'unshort']),
+ new \Twig\TwigFilter('short', [$this->slugger, 'short']),
+ new \Twig\TwigFilter('slug', [$this->slugger, 'slug']),
+ new \Twig\TwigFilter('intldate', [$this->intl, 'date'], ['needs_environment' => true]),
+ new \Twig\TwigFilter('intlnumber', [$this->intl, 'number']),
+ new \Twig\TwigFilter('intlcurrency', [$this->intl, 'currency']),
+ new \Twig\TwigFilter('download', 'file_get_contents', [false, null]),
+ new \Twig\TwigFilter('base64_encode', 'base64_encode'),
+ new \Twig\TwigFilter('base64_decode', 'base64_decode')
+ ];
}
}