2014-07-20 47 views
0

假設我想顯示一個更大的數據集,並且可能有很多空值/空值。我不想爲每個變量定義default filter。 是否有一種方法可以顯示模板中所有(空,空)變量的默認值(如:「未指定」)。symfony,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 %} 

控制器:

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, 
     )); 
    } 
} 
+1

您可以在傳遞樹枝參數時在控制器中設置「未指定」值;或者你可以在小枝條件下檢查該值是否爲空(但默認過濾器更可靠和可讀) – Javad

+0

您能給出這兩種可能性的代碼示例嗎? – kinske

+0

如果您可以在您的控制器和枝條文件中發佈當前代碼,我將能夠對其進行修改,以便您可以獲得想法 – Javad

回答

1

您可能需要爲此創建自定義的樹枝延伸。

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 } 

現在你可以用它在你的樹枝文件:

{% set employee = employee|setDefaults %} 

不過我相信default過濾器在樹枝更好。

+0

我想你誤解了我。我不希望爲特定類別設定默認值。我希望它對許多課程都是動態的。 – kinske

+0

@kinske哦,我明白了;我認爲你也可以像上面那樣創建你自己的過濾器,但是'$ employee'應該是'$ object',它必須在數組中(我的意思是你需要首先將對象轉換爲數組,然後應用過濾器) ;現在你可以檢查數組中的每個元素是否爲空設置默認值;並返回數組 – Javad

+0

你說得對,最好使用樹枝默認過濾器。您的示例正在工作,但由於屬性命名,在轉換爲數組並隨後在樹枝模板中訪問數組時遇到問題。例如。 employee.id獲取到KuMiV \ EmployeeBundle \ Entity \ Employeeid。如果我把數組轉換成一個對象(StdClass),那麼這個屬性就會被正確地轉換並且看起來就像一個原始實例:'object(stdClass)#1999(3){[「id」:「KuMiV \ EmployeeBundle \ Entity \ Employee」。 .'但是如果我想通過employee.id訪問,我得到以下錯誤:對象「stdClass」的方法名「不存在於...中 – kinske

相關問題