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)}}