2015-01-31 123 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