zenfra 0 Denunciar post Postado Novembro 21, 2009 Boa tarde, Eu estou criando um element para poder utilizar chamando nos layouts que eu precisar de um menu superior em minha aplicação, porém, quando o chamo no layout ele apresenta um erro no foreach que não estou conseguindo resolver. Meu element esta criado da seguinte forma: <?php $Estruturas = $this->requestAction('/estruturas/pai'); foreach( $Estruturas as $estrutura ): print $estrutura['Estrutura']['ds_descricao']; endforeach; ?> Os dados são chamados através de uma requestAction para o model estrutura e método pai, que retorna os registros, segue método no controller da estrutura: <?php class EstruturasController extends AppController { var $name = 'Estruturas'; var $helpers = array( 'Html' , 'Form' , 'Javascript' , 'Ajax' ); function index(){ $this->set( 'Estruturas' , $this->Estrutura->find( 'all' )) ; } function pai(){ $Estrutura = $this->Estrutura->find( 'all' , array( 'fields' => array( 'Estrutura.id' , 'Estrutura.ds_descricao' ))); $this->set( 'Estruturas' , $Estrutura ); } } ?> Então tenho meu layout: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN""http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head><title>opa</title> <?php print $html->charset(); ?> <?php print $html->css( array( 'estrutura' ) ); ?> <?php echo $scripts_for_layout ?> </head> <body> <div id="DivGeral"> <div id="DivTopo"> <div id="DivTopoTopo"> <ul> <li>[ Modo 800 x 600 ]</li> <li>[ Aumentar fonte A+ | A- ]</li> <li>[ Efetuar logon ] </li> </ul> </div> <div id="DivTopoCentro"> <div id="DivTopoCentroTopo"> <?php print 'São Paulo, 20 de Novembro de 2009'; ?> </div> <?php print $html->image('logo.jpg', array( 'alt' => 'Franze Sobre Tecnolofia' )); ?> </div> <div id="DivTopoBase"> <?php print $this->element('menu_administrativo_superior'); ?> </div> </div> <div id="DivCentro"> <div id="DivCentroTopo"> <div id="DivCentroTopoEsquerda"></div> <div id="DivCentroTopoDireita"> <p><strong>Você esta em: </strong><a href="javascript:void(0)"> Principal</a> > <a href="javascript:void(0)">Usuario</a> </p> </div> </div> <div id="DivCentroEsquerda"></div> <div id="DivCentroDireita"> <div id="DivCentroDireitaTopo"> <div id="DivCentroDireitaTopoEsquerda"> <ul> <li><img src="../img/add.png"/> <strong>Novo Cadastro</strong></li> </ul> </div> <div id="DivCentroDireitaTopoDireita"> <ul> <li> <img src="../img/info_info.png" /> Exibe informações do usuário </li> <li> <img src="../img/ativo_info.png"/> Inativa usuário</li> <li> <img src="../img/delete_info.png"/> Excluí usuário</li> </ul> </div> </div> <div id="DivCentroDireitaCentro"> <?php print $content_for_layout; ?> </div> </div> </div> <div id="DivFooter"> </div> </div> </div> <?php $session->flash(); ?> </div><!-- É aqui que eu quero que minhas views apareçam --> <!-- Adicione um rodapé para cada página mostrada --> <div id="footer">...</div> </body> </html> E chamo o element dentro do layout na seguintes linhas e da seguinte forma: <div id="DivTopoBase"> <?php print $this->element('menu_administrativo_superior'); ?> </div> Mas é apresentado o seguinte erro: Warning (2): Invalid argument supplied for foreach() [APP\views\elements\menu_administrativo_superior.ctp, line 5] Que na linha 5 do element é a seguinte linha: foreach( $Estruturas as $estrutura ): Alguém saberia me dizer o que pode ser, já que estou acompanhando a documentação do cakePHP sobre elements no link cakePHP elements e aparamentemenre esta correto? Obrigado! Compartilhar este post Link para o post Compartilhar em outros sites
~TiuTalk~ 7 Denunciar post Postado Novembro 21, 2009 No método "pai" dentro de EstruturasController você não tem que usar o $this->set e sim o return... Assim: function pai() { $Estrutura = $this->Estrutura->find( 'all' , array( 'fields' => array( 'Estrutura.id' , 'Estrutura.ds_descricao' ))); return $Estrutura; }Isso acontece pois quando você usou o: $Estruturas = $this->requestAction('/estruturas/pai');Significa que $Estruturas vai receber O RETORNO de $this->requestAction(...); Entendeu? :) Compartilhar este post Link para o post Compartilhar em outros sites
zenfra 0 Denunciar post Postado Novembro 21, 2009 Boa... Valeu cara fucionou ... Então meu controller fica assim: <?php class EstruturasController extends AppController { var $name = 'Estruturas'; var $helpers = array( 'Html' , 'Form' , 'Javascript' , 'Ajax' ); function index(){ $this->set( 'Estruturas' , $this->Estrutura->find( 'all' )) ; } function pai(){ $Estrutura = $this->Estrutura->find( 'all' , array( 'fields' => array( 'Estrutura.id' , 'Estrutura.ds_descricao' ))); return $Estrutura; } } ?> Onde a linha que antes era assim: $this->set( 'Estruturas' , $Estrutura ); Deve ficar na realidade assim: return $Estrutura; Não havia prestado atenção nesse detalhe no documento, mas esta lá, acompanhando o item 3.10.3.1 Passando Variáveis para um Elemento Beleza, Obrigado! Compartilhar este post Link para o post Compartilhar em outros sites