Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
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
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 );
}
}
}
?>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.
Você não pode usar uma função/método diretamente na propriedade.
Faça um construct e sete:
$this->Categoria = ClassRegistry::init('Categoria');