2015-01-31 4 views
1

У меня есть потребительной случай для добавления ucfirst фильтра в шаблоне прута и у меня он работает просто отлично с помощью этого:Twig Добавить фильтр

$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

Почему вы не используете фильтр твитов [capize] (http://twig.sensiolabs.org/doc/filters/capitalize.html#capitalize)? – Matteo

+0

Потому что он устанавливает остальную часть строки в нижний регистр. – Diemuzi

ответ

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

Смежные вопросы