- 首页
- PHP
- symfony, twig - 模板中所有变量的默认过滤器
symfony, twig - 模板中所有变量的默认过滤器
[英] symfony, twig - default filter for all variables in template
本文介绍了symfony, twig - 模板中所有变量的默认过滤器的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
假设我想显示更大的数据集,并且可能有许多空值/空值.我不想为每个变量定义 默认过滤器.有没有办法为模板中的所有(空、空)变量显示默认值(例如:未指定").
树枝:
{# src/KuMiV/EmployeeBundle/Resources/views/Other/detailItem.html.twig #}{% 扩展 "base.html.twig" %}...{% 块内容 %}<h3 class="sub-header">Personenbezogene Angaben</h3><div class="row"><div class="col-md-3"><标签>ID </label><p>{{employee.id }} </p>
<div class="col-md-3"><标签>标题 </label><p>{{employee.title|default('keine Angabe') }} </p>
<div class="col-md-3"><标签>Vorname </label><p>{{employee.firstName }} </p>
<div class="col-md-3"><标签>Nachname </label><p>{{employee.lastName }} </p>
<div class="row"><div class="col-md-3"><标签>Geschlecht </label><p>{{employee.gender }} </p>
<div class="col-md-3"><标签>电子邮件 </label><p>{{employee.email|default('keine Angabe') }} </p>
<div class="col-md-3"><标签>电话 1</label><p>{{employee.phone1|default('keine Angabe') }} </p>
<div class="col-md-3"><标签>电话 2 </label><p>{{employee.phone2|default('keine Angabe') }} </p>
...{% 端块内容 %}
控制器:
class DefaultController 扩展控制器{公共函数 detailAction($id){$employee = $this->getDoctrine("员工")->getRepository("EmployeeBundle:Employee")->查找($id);return $this->render('EmployeeBundle:Other:detail.html.twig', array('雇员' =>$雇员,));}}
解决方案
您可能需要为此创建自定义树枝扩展.
命名空间 Employee\EmployeeBundle\Twig;类 EmployeeExtension 扩展 \Twig_Extension{公共函数 getFilters(){返回数组(new \Twig_SimpleFilter('setDefaults', array($this, 'setDefaultFilter')),);}公共函数 setDefaultFilter($employee){$employee.title = !empty($employee.title) ?$employee.title : 'keine Angabe';$employee.email = !empty($employee.email) ?$employee.email : 'keine Angabe';//... 很快;继续为他人返回 $employee;}公共函数 getName(){返回'employee_extension';}}
记住将扩展注册为服务:
服务:employee.twig.employee_extension:类:Employee\EmployeeBundle\Twig\EmployeeExtension标签:- { 名称:twig.extension }
现在你可以在你的树枝文件中使用它:
{% 设置员工 = 员工|setDefaults %}
我仍然相信 twig 中的 default
过滤器更好.
Let's say I want to display a larger data set and it is possible that there are many null / empty values. I don't want to define default filter for every variable.
Is there a way to display a default value for all (empty, null) variables in a template (like: "not specified").
EDIT:
twig:
{# src/KuMiV/EmployeeBundle/Resources/views/Other/detailItem.html.twig #}
{% extends "base.html.twig" %}
...
{% block content %}
<h3 class="sub-header">Personenbezogene Angaben</h3>
<div class="row">
<div class="col-md-3">
<label> ID </label><p>{{ employee.id }} </p>
</div>
<div class="col-md-3">
<label> Titel </label><p>{{ employee.title|default('keine Angabe') }} </p>
</div>
<div class="col-md-3">
<label> Vorname </label><p>{{ employee.firstName }} </p>
</div>
<div class="col-md-3">
<label> Nachname </label><p>{{ employee.lastName }} </p>
</div>
</div>
<div class="row">
<div class="col-md-3">
<label> Geschlecht </label><p>{{ employee.gender }} </p>
</div>
<div class="col-md-3">
<label> Email </label><p>{{ employee.email|default('keine Angabe') }} </p>
</div>
<div class="col-md-3">
<label> Telefon 1</label><p>{{ employee.phone1|default('keine Angabe') }} </p>
</div>
<div class="col-md-3">
<label> Telefon 2 </label><p>{{ employee.phone2|default('keine Angabe') }} </p>
</div>
</div>
...
{% endblock content %}
Controller:
class DefaultController extends Controller
{
public function detailAction($id)
{
$employee = $this->getDoctrine("Employee")
->getRepository("EmployeeBundle:Employee")
->find($id);
return $this->render('EmployeeBundle:Other:detail.html.twig', array(
'employee' => $employee,
));
}
}
解决方案
You may need to create a custom twig extension for this.
namespace Employee\EmployeeBundle\Twig;
class EmployeeExtension extends \Twig_Extension
{
public function getFilters()
{
return array(
new \Twig_SimpleFilter('setDefaults', array($this, 'setDefaultFilter')),
);
}
public function setDefaultFilter($employee)
{
$employee.title = !empty($employee.title) ? $employee.title : 'keine Angabe';
$employee.email = !empty($employee.email) ? $employee.email : 'keine Angabe';
//... So on; continue for others
return $employee;
}
public function getName()
{
return 'employee_extension';
}
}
Keep in mind to register the extension as a service:
services:
employee.twig.employee_extension:
class: Employee\EmployeeBundle\Twig\EmployeeExtension
tags:
- { name: twig.extension }
Now you can use it in your twig file as:
{% set employee = employee|setDefaults %}
Still I believe the default
filter in twig is better.
这篇关于symfony, twig - 模板中所有变量的默认过滤器的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文