teoremas resueltos electronica ejercicios ejemplos booleanos booleanas booleana boole symfony twig

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.