quinta-feira, 15 de dezembro de 2011

Adicionando Filtros no Twig

Só para registrar, segue uma forma simples de adicionar filtros no TWIG. Ultimamente tenho trabalhado muito com o Symfony2.

O Symfony 2 vem com o twig, como sistema de templates padrão, gostei dele, é bom de trabalhar, e também é fácil de criar o layout com este sistema de template.
No início me lembrou um pouco de Facelets, outro ótimo sistema de templates, porém achei o twig mais simples e mais funcional, talvez porque cada um está numa linguagem diferente e porque não dizer num paradigma diferente também.

Com o tempo surgiram algumas complicações, como exibir apenas parte do texto, então pesquisei um pouco na internet, agrupei um material e consegui assimilar uma forma simples para adicionar filtros

Abaixo segue o arquivo que deve ser adicionado dentro do diretório Extension que deve estar dentro do diretório do seu bundle.



namespace Acme\AcmeBundle\Extension;

class Text extends \Twig_Extension {

    /**
     * Returns a list of filters.
     *
     * @return array
     */
    public function getFilters() {
        return array(
            'substr' => new \Twig_Filter_Method($this, 'substr'),
            'strtoupper' => new \Twig_Filter_Method($this, 'strtoupper')
                        );
    }

    /**
     * Name of this extension
     *
     * @return string
     */
    public function getName() {
        return 'Text';
    }

    public function strtoupper($string ) {
        return strtoupper((string)$string);
    }

    public function substr($string, $start , $length=null) {
        return substr((string)$string, $start, $length);        
    }

}
Depois disto adicione na Classe DependencyInjection do seu Bundle o seguinte conteúdo, ou altere da forma necessária:
    /**
     * {@inheritDoc}
     */
    public function load(array $configs, ContainerBuilder $container) {

        $definition = new Definition('Acme\AcmeBundle\Extension\Text');
        $definition->addTag('twig.extension');
        $container->setDefinition('Text', $definition);

        $configuration = new Configuration();
        $config = $this->processConfiguration($configuration, $configs);

        $config = new \Doctrine\ORM\Configuration();
        /** CONTINUES */
        $loader = new Loader\XmlFileLoader($container, new FileLocator(__DIR__ . '/../Resources/config'));
        $loader->load('services.xml');
    }
Feito isto é só usar o seu filtro, Este filtro no twig ficaria algo assim:
  {{campoTexto|substr(0,2)}}

Nenhum comentário:

Postar um comentário