symfony - resueltos - booleanos en python ejemplos
filtrar variable booleana en una plantilla de rama (3)
Tengo una variable booleana (0, 1) en mi base de datos y quiero filtrarla a una palabra 0 para ''NO'' y 1 para ''Sí''. ¿Cómo puedo hacer eso en una plantilla de rama?
Quiero algo como {{ bool_var | ''??'' }}
{{ bool_var | ''??'' }}
{{ bool_var | ''??'' }}
donde el ''??'' es el filtro
O mejor aún, podrías hacer un booleano para el transformador de cuerdas y agregarlo a tu forma.
Podría ser un código ''más'', pero el lado positivo es la reutilización. No tendrías que ensuciar tus plantillas con lógica y podrías reutilizarlas en todas las formas que quieras :)
Pros:
- No está vinculado al componente de formulario, por lo que aún puede usarlo.
- Úselo en cualquier lugar, con más funcionalidad que una extensión de ramita.
- No hay necesidad de meterse con la configuración twig o symfony.
- Puede usarlo en los formularios.
Documentación: http://symfony.com/doc/current/cookbook/form/data_transformers.html
Ejemplo de: Symfony2 Forms BooleanToStringTransformer Issue
<?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;
}
}
Para construir sobre lo que dijo @dmnptr en su último párrafo, en su paquete de aplicaciones, cree una carpeta /Twig
y cree una clase AppExtension
dentro.
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'';
}
}
Luego, en la carpeta Resources/config/
su paquete, agregue lo siguiente a su services.yml
donde class es la clase de la nueva clase:
app.twig_extension:
class: [YourAppBundleNamespace]/Twig/AppExtension
public: false
tags:
- { name: twig.extension }
El filtro estará disponible en Twig simplemente agregando a |boolean
a cualquier variable.
Una manera rápida de lograr eso es usar el operador ternario:
{{ bool_var ? ''Yes'':''No'' }}
http://twig.sensiolabs.org/doc/templates.html#other-operators
También podría crear un filtro personalizado que haría esto. Lea acerca de las extensiones TWIG personalizadas - http://symfony.com/doc/current/cookbook/templating/twig_extension.html