У меня есть логическая переменная (0, 1) в моей базе данных, и я хочу отфильтровать ее до слова 0 для "НЕТ" и 1 для "Да". как я могу это сделать в шаблоне ветки?
Мне нужно что-то вроде {{ bool_var | '??' }}
, где '??' является фильтром
У меня есть логическая переменная (0, 1) в моей базе данных, и я хочу отфильтровать ее до слова 0 для "НЕТ" и 1 для "Да". как я могу это сделать в шаблоне ветки?
Мне нужно что-то вроде {{ bool_var | '??' }}
, где '??' является фильтром
Быстрый способ добиться этого - использовать тернарный оператор:
{{ bool_var ? 'Yes':'No' }}
http://twig.sensiolabs.org/doc/templates.html#other-operators
Вы также можете создать настраиваемый фильтр, который сделает это. Читайте о пользовательских расширениях TWIG - http://symfony.com/doc/current/cookbook/templating/twig_extension.html
Чтобы опираться на то, что @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
к любой переменной.
Или даже лучше вы можете сделать логический строковый трансформатор и добавить его в свою форму.
Это может быть код "больше", но потенциал повторного использования. Вам не нужно было бы замаскировать ваши шаблоны логикой, и вы могли бы использовать его для всех форм, которые вы хотите:)
Плюсы:
Документация: 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;
}
}