Skip to content

Commit

Permalink
Twig integration
Browse files Browse the repository at this point in the history
Add an optional Twig integration to have an extension for enum labels.
  • Loading branch information
soullivaneuh committed Jun 21, 2016
1 parent df62369 commit a88474c
Show file tree
Hide file tree
Showing 5 changed files with 106 additions and 1 deletion.
7 changes: 6 additions & 1 deletion composer.json
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,12 @@
"symfony/form": "^2.7 || ^3.0",
"symfony/validator": "^2.7 || ^3.0",
"phpunit/phpunit": "~4.1",
"sllh/php-cs-fixer-styleci-bridge": "^2.0"
"sllh/php-cs-fixer-styleci-bridge": "^2.0",
"twig/twig": "^1.24",
"symfony/twig-bundle": "^2.7 || ^3.0",
"symfony/http-kernel": "^2.7 || ^3.0",
"symfony/dependency-injection": " ^2.7 || ^3.0",
"symfony/config": " ^2.7 || ^3.0"
},
"suggest": {
"symfony/form": "To use enum form type",
Expand Down
20 changes: 20 additions & 0 deletions src/Bridge/Symfony/Bundle/Greg0ireEnumBundle.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
<?php

namespace Greg0ire\Enum\Bridge\Symfony\Bundle;

use Greg0ire\Enum\Bridge\Symfony\DependencyInjection\Greg0ireEnumExtension;
use Symfony\Component\HttpKernel\Bundle\Bundle;

/**
* @author Sullivan Senechal <[email protected]>
*/
final class Greg0ireEnumBundle extends Bundle
{
/**
* {@inheritdoc}
*/
protected function getContainerExtensionClass()
{
return Greg0ireEnumExtension::class;
}
}
26 changes: 26 additions & 0 deletions src/Bridge/Symfony/DependencyInjection/Greg0ireEnumExtension.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
<?php

namespace Greg0ire\Enum\Bridge\Symfony\DependencyInjection;

use Symfony\Component\Config\FileLocator;
use Symfony\Component\DependencyInjection\ContainerBuilder;
use Symfony\Component\DependencyInjection\Extension\Extension;
use Symfony\Component\DependencyInjection\Loader\XmlFileLoader;

/**
* @author Sullivan Senechal <[email protected]>
*/
final class Greg0ireEnumExtension extends Extension
{
/**
* {@inheritdoc}
*/
public function load(array $configs, ContainerBuilder $container)
{
$loader = new XmlFileLoader($container, new FileLocator(__DIR__.'/../Resources/config'));

if (class_exists(\Twig_Extension::class)) {
$loader->load('twig.xml');
}
}
}
11 changes: 11 additions & 0 deletions src/Bridge/Symfony/Resources/config/twig.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
<?xml version="1.0" encoding="UTF-8" ?>

<container xmlns="http://symfony.com/schema/dic/services"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://symfony.com/schema/dic/services http://symfony.com/schema/dic/services/services-1.0.xsd">
<services>
<service id="greg0ire_enum.twig.extension.enum" class="Greg0ire\Enum\Bridge\Twig\Extension\EnumExtension">
<tag name="twig.extension"/>
</service>
</services>
</container>
43 changes: 43 additions & 0 deletions src/Bridge/Twig/Extension/EnumExtension.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
<?php

namespace Greg0ire\Enum\Bridge\Twig\Extension;

/**
* @author Sullivan Senechal <[email protected]>
*/
final class EnumExtension extends \Twig_Extension
{
/**
* {@inheritdoc}
*/
public function getFunctions()
{
return [
new \Twig_SimpleFunction('enum_label', [$this, 'label']),
];
}

/**
* @param mixed $value
* @param string $class The enum class name
* @param bool $prefixWithClass Prefix key with class name if true
*
* @return string
*/
public function label($value, $class, $prefixWithClass = false)
{
$keys = $prefixWithClass
? call_user_func([$class, 'getClassPrefixedKeys'], 'strtolower')
: call_user_func([$class, 'getKeys'], 'strtolower');

return '';
}

/**
* {@inheritdoc}
*/
public function getName()
{
return 'greg0ire_enum';
}
}

0 comments on commit a88474c

Please sign in to comment.