J'ai une variable booléenne (0, 1) dans ma base de données et je veux la filtrer en un mot 0 pour "NON" et 1 pour "Oui". comment puis-je faire cela dans un modèle twig
Je veux quelque chose comme {{ bool_var | '??' }}
où le '??' est le filtre
Le moyen rapide d'y parvenir est d'utiliser l'opérateur ternaire:
{{ bool_var ? 'Yes':'No' }}
http://twig.sensiolabs.org/doc/templates.html#other-operators
Vous pouvez également créer un filtre personnalisé qui ferait cela. En savoir plus sur les extensions personnalisées TWIG - http://symfony.com/doc/current/cookbook/templating/twig_extension.html
Pour construire sur ce que @dmnptr a dit dans son dernier paragraphe, dans votre bundle d'application, créez un dossier /Twig
Et créez une classe AppExtension
à l'intérieur.
class AppExtension extends \Twig_Extension
{
public function getFilters()
{
return array(
new \Twig_SimpleFilter('boolean', array($this, 'booleanFilter')),
);
}
public function booleanFilter($value)
{
if ($value) {
return "Yes";
} else {
return "No";
}
}
public function getName()
{
return 'app_extension';
}
}
Ensuite, dans le dossier Resources/config/
De votre ensemble, ajoutez ce qui suit à votre services.yml
Où classe est la classe de la nouvelle classe:
app.twig_extension:
class: [YourAppBundleNamespace]\Twig\AppExtension
public: false
tags:
- { name: twig.extension }
Le filtre sera disponible en Twig en ajoutant simplement un |boolean
À n'importe quelle variable.
Ou encore mieux, vous pouvez créer un transformateur booléen en chaîne et l'ajouter à votre formulaire.
Il pourrait s'agir de "plus" de code, mais l'avantage est la réutilisabilité. Vous n'auriez pas à salir vos modèles avec la logique et vous pourriez les réutiliser dans tous les formulaires que vous voulez :)
Avantages:
Documentation: http://symfony.com/doc/current/cookbook/form/data_transformers.html
Exemple de: Problème Symfony2 Forms BooleanToStringTransformer
<?php
use Symfony\Component\Form\DataTransformerInterface;
use Symfony\Component\Form\Exception\TransformationFailedException;
class BooleanToStringTransformer implements DataTransformerInterface
{
private $trueValue;
private $falseValue;
public function __construct($trueValue, $falseValue)
{
$this->trueValue = $trueValue;
$this->falseValue = $falseValue;
}
public function transform($value)
{
if (null === $value) {
return null;
}
if (!is_bool($value)) {
throw new TransformationFailedException('Expected a Boolean.');
}
return true === $value ? $this->trueValue : $this->falseValue;
}
public function reverseTransform($value)
{
if (null === $value) {
return null;
}
if (!is_string($value)) {
throw new TransformationFailedException('Expected a string.');
}
return $this->trueValue === $value;
}
}