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