Smarty e o problema (bug) com objetos aninhados (nested)

setembro 20, 2008 – 10:04 pm

Comecei 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!

Compartilhe: These icons link to social bookmarking sites where readers can share and discover new web pages.
  • Digg
  • Sphinn
  • del.icio.us
  • Facebook
  • Mixx
  • Google
  • Furl
  • Live
  • NewsVine
  • Rec6
  • Reddit
  • Spurl
  • StumbleUpon
  • Technorati
  • YahooMyWeb
Tags: smarty bug problema objeto objetos aninhados nested

Related posts

  1. 2 Responses to “Smarty e o problema (bug) com objetos aninhados (nested)”

  2. 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

  3. 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

Post a Comment