symfony, twig - 模板中所有变量的默认过滤器 [英] symfony, twig - default filter for all variables in template

查看:25
本文介绍了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屋!

查看全文
相关文章
PHP最新文章
热门教程
热门工具
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆