Предположим, я хочу отобразить больший набор данных, и, возможно, существует много значений null / empty. Я не хочу определять фильтр по умолчанию для каждой переменной. Есть ли способ показать значение по умолчанию для всех (пустых, нулевых) переменных в шаблоне (например: «не указано»).
РЕДАКТИРОВАТЬ:
веточка:
{# 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 %}
контроллер:
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, )); } }
Для этого вам может потребоваться создать пользовательское расширение ветки.
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'; } }
Имейте в виду, чтобы зарегистрировать расширение как услугу:
services: employee.twig.employee_extension: class: Employee\EmployeeBundle\Twig\EmployeeExtension tags: - { name: twig.extension }
Теперь вы можете использовать его в своем файле twig как:
{% set employee = employee|setDefaults %}
Тем не менее, я считаю, что фильтр по default
в ветке лучше.