zenfra 0 Denunciar post Postado Novembro 20, 2009 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
lucaswxp 22 Denunciar post Postado Novembro 21, 2009 Você não pode usar uma função/método diretamente na propriedade. Faça um construct e sete: $this->Categoria = ClassRegistry::init('Categoria'); Compartilhar este post Link para o post Compartilhar em outros sites
zenfra 0 Denunciar post Postado Novembro 21, 2009 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
Sérgio Macedo 0 Denunciar post Postado Novembro 22, 2009 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