Ir para conteúdo

POWERED BY:

Arquivado

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

zenfra

[Resolvido] ClassRegistry:init()

Recommended Posts

Boa tarde,,

 

Em um grupo do google do cakePHP postei um código onde fui orientado a utilizar ClassRegistry::init em vez de $uses para chamar models.

 

O problema é que não encontro nenhuma referência para estudar isso e a unica que encontrei é a api ClassRegistry

 

Então coloquei em meu código no controlle a linha

var $Categoria       = ClassRegistry::init('Categoria');

E o controller ficou assim:

<?php

  class LivrosController extends AppController{
  
   var $name            = 'Livros';
   var $helpers         = array( 'Html' , 'Form' , 'Javascript' , 'Ajax' );
   var $Categoria       = ClassRegistry::init('Categoria');
  // var $uses           = array( 'Categoria', 'Livro' );
   var $uses            = array(); 
   var $components      = array( 'RequestHandler' );
   
   function index(){
     $this->set('Livros', $this->Livro->find('all', array('fields' => array('Livro.id' , 'Livro.nome' ))));
   }
   
   function add(){
   
    
     $this->set('Categorias', $this->Categoria->find('all', array('fields' => array( 'Categoria.id' , 'Categoria.nome' ))));

	 $categoria = $this->data['Categoria'];
	 
	 for( $i = 0 ; $i <= ( count( $categoria ) - 1 ) ; $i++ ){
         if ( $categoria[$i]['categoria_id'] == 0 ) {
             $this->data['Categoria'] [$i]['categoria_id'] = Null;
          }		 
	 }

 	 if( $this->Livro->saveAll( $this->data )){
	 	            $msg = sprintf('O curso %s foi editado com sucesso.', $this->data['Livro']['nome'] );
					$this->Session->setFlash($msg,'default', array('class'=>'ui-corner-all sucesso'));
					//$this->redirect( array( 'controller' => 'Livros', 'action' => 'index') );
	    print_r( $this->data );
	   }
    }
  
  }

?>

 

Mas quando acesso a url é apresentado o seguinte erro:

 

Parse error: parse error, expecting `','' or `';'' in C:\Program Files\Apache Software Foundation\Apache2.2\htdocs\cakestudo\app\controllers\livros_controller.php on line 7

Alguém saberia me dizer o que pode ser?

 

Obrigado

Compartilhar este post


Link para o post
Compartilhar em outros sites

Obrigado Lucas...

 

Valeu funcionou...

 

Segue como fiz, adicionei no meu metodo add a linha sugerida:

 

$this->Categoria = ClassRegistry::init('Categoria');
<?php

  class LivrosController extends AppController{
  
   var $name            = 'Livros';
   var $helpers         = array( 'Html' , 'Form' , 'Javascript' , 'Ajax' );
   var $components      = array( 'RequestHandler' );
   var $Categoria;
   
   
   function index(){
     $this->set('Livros', $this->Livro->find('all', array('fields' => array('Livro.id' , 'Livro.nome' ))));
   }
   
   function add(){
   
     $this->Categoria = ClassRegistry::init('Categoria');
	 
     $this->set('Categorias', $this->Categoria->find('all', array('fields' => array( 'Categoria.id' , 'Categoria.nome' ))));

	 $categoria = $this->data['Categoria'];
	 
	 for( $i = 0 ; $i <= ( count( $categoria ) - 1 ) ; $i++ ){
         if ( $categoria[$i]['categoria_id'] == 0 ) {
             $this->data['Categoria'] [$i]['categoria_id'] = Null;
          }		 
	 }

 	 if( $this->Livro->saveAll( $this->data )){
	 	            $msg = sprintf('O curso %s foi editado com sucesso.', $this->data['Livro']['nome'] );
					$this->Session->setFlash($msg,'default', array('class'=>'ui-corner-all sucesso'));
					//$this->redirect( array( 'controller' => 'Livros', 'action' => 'index') );
	    //print_r( $this->data );
	   }
    }
  
  }

?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

Caro Zenfra,

 

Existe uma função que instância o modelo que não tem relacionamento com o modelo usado.

Pode ser instânciado diretamente no seu método... evitando dele ser carregado em todas as ações deste controle.

 

http://book.cakephp.org/pt/view/845/loadModel

 

$this->loadModel('Exemplo');
$this->Exemplo->find(...... 

Espero ter ajudado.

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.