2015-01-31 153 views
1

我有一個用例在我的樹枝模板添加ucfirst過濾器,我有它通過使用這個工作得很好:枝條添加過濾器

$this->getServiceLocator() 
    ->get('Twig_Environment') 
    ->addFilter(
     new \Twig_SimpleFilter(
      'ucfirst', 
      'ucfirst' 
     ) 
    ); 

不過我很好奇,如果有可能添加此過濾器通過module.config.php

也許是這樣的:

'zfctwig'   => [ 
    'environment_options' => [ 
     'cache' => 'data/cache/twig', 
     'debug' => true 
    ], 
    'extensions'   => [ 
     'Twig_Extension_Debug' 
    ], 
    'Twig_Environment' => [ 
     'filters' => [ 
      'ucfirst' => 'ucfirst' 
     ] 
    ] 
] 

我知道這個片段是錯誤的,但如果可能的話,會是什麼配置是什麼樣子?

我目前正在使用ZF2和ZfcTwig模塊。

+0

爲什麼不使用[sizeize](http://twig.sensiolabs.org/doc/filters/capitalize.html#capitalize)樹枝過濾器? – Matteo 2015-02-01 12:37:28

+0

因爲它將字符串的其餘部分設置爲小寫。 – Diemuzi 2015-02-01 13:07:48

回答

2

不,不可能僅在ZfcTwig模塊中配置新的過濾器。

但建議您創建項目擴展(twig doc)並將所有項目特定的過濾器(標記,測試等)放在那裏。這個項目擴展

例子:

<?php 

namespace Application\Twig; 

use Twig_Extension; 
use Twig_SimpleFilter; 

class ApplicationExtension extends Twig_Extension 
{ 
    public function getFilters() 
    { 
     return [ 
      new Twig_SimpleFilter('ucfirst', 'ucfirst'), 
     ]; 
    } 

    public function getTests() 
    { 
     return [ 
      // ... 
     ]; 
    } 

    public function getFunctions() 
    { 
     return [ 
      // ... 
     ]; 
    } 
} 

,然後你可以註冊此擴展ZfcTwig配置:

'zfctwig' => [ 
    'extensions' => [ 
     \Application\Twig\ApplicationExtension::class, 
    ], 
] 

如果你需要再加入一些其他過濾器或功能,你可以只需將其添加到此擴展並開始使用它。

+0

這是一個好主意。我試圖找到一種方式,讓我擁有一箇中心位置,而不是將我現在使用的每個控制器放置在特定視圖中。這似乎是做我正在尋找一種不同的方法。謝謝。 – Diemuzi 2015-02-01 19:26:04