Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Celamar

Smarty O.O.

Recommended Posts

Olá Pessoal!

 

Tendo a seguinte estrutura:

 

Pessoa Object
(
    [codigo:private] => 1
    [nome:private] => Fulano
    [codProfissao:private] => 10
    [profissao:private] => Profissao Object
        (
            [codProfissao:private] => 10
            [descricao:private] => Analista
        )

)

Como recupero a informação "descricao" da classe Profissao() no meu html?

 

Uma das tentativas foi:

{$objPessoa[i]->getProfissao()->getDescricao()}

Mas com isso tenho o seguinte erro:

syntax error: unrecognized tag: $objPessoa[i]->getProfissao()->getDescricao()

Já para

{$objPessoa[i]->getNome()}
funciona certinho.

 

Obrigada

 

Pelo visto este vai ser um desafio!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Poste o código dos métodos que você utiliza.

 

Aí vai:

class Pessoa {
	private $codigo;
	private $nome;
	private $objProfissao; //referencia
	...

	sets...	
	function setObjProfissao($obj){
		$this->objProfissao = $obj;
	}

	gets...
	function getObjProfissao(){      
	      return $this->objProfissao;
	}
}

##################################
class Profissao {
	private $codigo;
	private $descricao;

	sets...
	function setDescricao($descricao){
		$this->descricao = $descricao;
	}
	
	gets...
	function getDescricao(){
		return $this->descricao;
	}
}

##################################
teste.php
$obj = PessaoDAO::listarTodos(); //aqui faz o sql e preenche os objetos
$smarty->assign_by_ref('objPessoa', $obj);
$smarty->display(...

##################################
teste.html
{section name=i loop=$objPessoa}
	<tr class="textoPadrao">
		<td>{$objPessoa[i]->getCodigo()}</td>
		...
		<td>{$objPessoa[i]->getObjProfissao()->getDescricao()}</td> *** NAO FUNCIONA
	</tr>
{/section}

Valeu!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Se você executar, antes do assign_by_ref():

 

print $obj -> getObjProfissao() -> getDescricao();

Você vê aquilo que esperaria ver no template Smarty?

 

Pode até colocar um exit depois desse print para abortar o processo disparardo pelo display().

 

Espera-se que você veja um Profissao Object com, por exemplo, [descricao:private] => Analista

Compartilhar este post


Link para o post
Compartilhar em outros sites

Fazendo isso:

$obj = TesteDAO::listarTodos();
$smarty->assign_by_ref('obj', $obj);
print_r($obj[0]->getObjProfissao());

Tenho:

Profissao Object ( [codProfissao:private] => 1 [descricao:private] => Analista ) 

Em conversa com outro desenvolvedor, sugeriu, não é a forma correta mas funcionou, deixar o atributo $objProfissao como public e acessar assim:

{$obj[0]->objProfissao->getDescricao()}

Não consigo me conformar que não há uma forma (correta) de fazer.

:-/

 

Se você executar, antes do assign_by_ref():

 

print $obj -> getObjProfissao() -> getDescricao();

Você vê aquilo que esperaria ver no template Smarty?

 

Pode até colocar um exit depois desse print para abortar o processo disparardo pelo display().

 

Espera-se que você veja um Profissao Object com, por exemplo, [descricao:private] => Analista

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Muito estranho isso.

 

Tem como postar a sua PessoaDAO::listarTodos()?

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.