Reputation: 607
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,
));
}
}
Upvotes: 1
Views: 2975
Reputation: 4397
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.
Upvotes: 1