Smarty e o problema (bug) com objetos aninhados (nested)
setembro 20, 2008 – 10:04 pmComecei a poucos dias a utilizar o Smarty. Ele é um conjunto de classes que separa o papel do designer e do programador em duas partes distintas de forma fácil e segura.
A versão utilizada é a 2.6.20.
Encontrei um problema quando precisei trabalhar com objetos aninhados (quando um objeto é referenciado por outro). Quando utilizo no template o código abaixo, o Smarty compila corretamente. Linha de código no meu template:
{$pessoaOBJ->getNome()}
Mas quando resolvia ter uma informação sobre um objeto aninhado não dava muito certo. Veja o exemplo:
{$pessoaOBJ->getMae()->getNome()}
Resultado: não compilou.
Procurei (procurei, procurei…) e encontrei a solução. É uma correção em uma linha de código do arquivo Smarty_Compiler.class.php. Abra o arquivo em um editor de texto qualquer e basta procurar por perto da linha 164. O código a alterar é:
$this->_obj_call_regexp = ‘(?:’ . $this->_obj_start_regexp . ‘(?:’ . $this->_obj_params_regexp . ‘)?(?:’ . $this->_dvar_math_regexp . ‘(?:’ . $this->_num_const_regexp . ‘|’ . $this->_dvar_math_var_regexp . ‘)*)?)’;
Basta comentá-lo. E adicionar o código na linha seguinte:
$this->_obj_call_regexp = ‘(?:’ . $this->_obj_start_regexp . ‘(?:’ . $this->_obj_params_regexp . ” . ‘(?:’ . $this->_obj_ext_regexp . $this->_obj_params_regexp . ‘)*’ . ‘)?(?:’ . $this->_dvar_math_regexp . ‘(?:’ . $this->_num_const_regexp . ‘|’ . $this->_dvar_math_var_regexp . ‘)*)?)’;
Então para não haver confusão:
Antes:
$this->_obj_call_regexp = ‘(?:’ . $this->_obj_start_regexp . ‘(?:’ . $this->_obj_params_regexp . ‘)?(?:’ . $this->_dvar_math_regexp . ‘(?:’ . $this->_num_const_regexp . ‘|’ . $this->_dvar_math_var_regexp . ‘)*)?)’;
Depois:
// $this->_obj_call_regexp = ‘(?:’ . $this->_obj_start_regexp . ‘(?:’ . $this->_obj_params_regexp . ‘)?(?:’ . $this->_dvar_math_regexp . ‘(?:’ . $this->_num_const_regexp . ‘|’ . $this->_dvar_math_var_regexp . ‘)*)?)’;
$this->_obj_call_regexp = ‘(?:’ . $this->_obj_start_regexp . ‘(?:’ . $this->_obj_params_regexp . ” . ‘(?:’ . $this->_obj_ext_regexp . $this->_obj_params_regexp . ‘)*’ . ‘)?(?:’ . $this->_dvar_math_regexp . ‘(?:’ . $this->_num_const_regexp . ‘|’ . $this->_dvar_math_var_regexp . ‘)*)?)’;
Então espero que tenha ficado bem explicadinho. Qualquer coisa confira o site que achei a solução (http://php-common.palepurple.co.uk/index.cgi/changeset/266)Quero que se existir qualquer dúvida adicione um comentário ou envie-me um email diretamente. Prefiro que mande email, estou com um problemão de SPAM aqui no blog =( e não quero apagar comentários legítimos.
Um abraço!
Tags: smarty bug problema objeto objetos aninhados nested















2 Responses to “Smarty e o problema (bug) com objetos aninhados (nested)”
Valeu!!
Estava com esse problema em um projeto que comecei a trabalhar.
Essa modificação funciono na boa, mas o estranho é que em algumas configurações nos clientes funcionam e e outras não.
Flw!
By Leonardo Lima on out 20, 2008
Leonardo, agradeço o comentário.
Caso queira compartilhar seus problemas com as configurações posso pesquisar e postar uma ajuda no blog.
Um abraço.
By Jonas Ruth on out 20, 2008