Подтвердить что ты не робот

Фильтровать логическую переменную в шаблоне ветки

У меня есть логическая переменная (0, 1) в моей базе данных, и я хочу отфильтровать ее до слова 0 для "НЕТ" и 1 для "Да". как я могу это сделать в шаблоне ветки?

Мне нужно что-то вроде {{ bool_var | '??' }}, где '??' является фильтром

4b9b3361

Ответ 2

Чтобы опираться на то, что @dmnptr сказал в своем последнем абзаце, в вашем приложении, создайте папку /Twig и создайте класс AppExtension внутри.

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';
    }
}

Затем в вашей папке Resources/config/ добавьте следующее к вашему services.yml, где class является классом нового класса:

app.twig_extension:
    class: [YourAppBundleNamespace]\Twig\AppExtension
    public: false
    tags:
        - { name: twig.extension }

Фильтр будет доступен в Twig, просто добавив |boolean к любой переменной.

Ответ 3

Или даже лучше вы можете сделать логический строковый трансформатор и добавить его в свою форму.

Это может быть код "больше", но потенциал повторного использования. Вам не нужно было бы замаскировать ваши шаблоны логикой, и вы могли бы использовать его для всех форм, которые вы хотите:)

Плюсы:

  • Не привязан к компоненту формы, поэтому вы все равно можете его использовать.
  • Используйте его где угодно, больше функциональности, чем расширение ветки.
  • Не нужно возиться с конфигурацией твига или symfony.
  • Может использовать его в самих формах.

Документация: http://symfony.com/doc/current/cookbook/form/data_transformers.html

Пример из: 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;
    }
}