我的数据库中有一个布尔变量(0,1),我希望将其过滤为单词0表示“否”'和1表示“是”'。我怎么能在树枝模板中做到这一点
我想要{{ bool_var | '??' }}
之类的内容,其中包括''是过滤器
答案 0 :(得分:68)
实现这一目标的快速方法是使用三元运算符:
{{ bool_var ? 'Yes':'No' }}
http://twig.sensiolabs.org/doc/templates.html#other-operators
您还可以创建一个自定义过滤器来执行此操作。了解自定义TWIG扩展程序 - http://symfony.com/doc/current/cookbook/templating/twig_extension.html
答案 1 :(得分: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 }
只需将|boolean
附加到任何变量即可在Twig中使用过滤器。
答案 2 :(得分:1)
或者甚至更好的是你可以将一个布尔值设置为字符串变换器并将其添加到表单中。
可能会更多'代码,但优点是可重用性。您不必使用逻辑使模板变脏,您可以将其重复用于所需的所有表单:)
优点:
文档: 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;
}
}