Eduiagami 1 Denunciar post Postado Março 1, 2010 Olá pessoal, To com um problema aki, quando eu entro na pagina para editar um registro ta tudo ok, mas quando eu clico no botao para alterar o registro vem o warning pedindo um argumento, istu está certo?? vou postar meu controller e view: CONTROLLER::: function perfil_editar($idc){ $id_curso = (int)$idc; $this->layout = "admin"; $this->pageTitle = "Editar Curso"; $id = $this->Auth->user('id'); if($id==NULL){ $this->redirect(array('controller'=>'admin','action'=>'login','perfil'=>false)); } //seta dados para layout $tipos = $this->Tipo->find('list',array('conditions'=>array('Tipo.ativo'=>'s'),'fields'=>array('Tipo.id','Tipo.nome'))); $categorias = $this->Categoria->find('list',array('conditions'=>array('Categoria.ativo'=>'s'),'fields'=>array('Categoria.id','Categoria.nome'))); $modalidades = $this->Modalidade->find('list',array('conditions'=>array('Modalidade.ativo'=>'s'),'fields'=>array('Modalidade.id','Modalidade.nome'))); $filiais = $this->Filial->find('list',array('conditions'=>array('Filial.anunciante_id'=>$this->Auth->user('id'),'Filial.ativo'=>'s'),'fields'=>array('Filial.id','Filial.nome'))); $this->set('tipos',$tipos); $this->set('modalidades',$modalidades); $this->set('categorias',$categorias); $this->set('filiais',$filiais); //cadastro if(empty($this->data)){ //retiro associacao para reduzir query $this->Curso->unbindModel( array('belongsTo' => array('Anunciante')) ); $this->Curso->unbindModel( array('hasMany' => array('Prematricula')) ); $this->data = $this->Curso->read(array('Curso.anunciante_id','Curso.tipo_id','Curso.categoria_id','Curso.subcategoria_id','Curso.modalidade_id','Curso.nivel_curso','Curso.periodo','Curso.titulo','Curso.resumo','Curso.descricao','Curso.objetivo','Curso.metodologia','Curso.pre-requisitos','Curso.vantagens','Curso.periodo','Curso.carga_horaria','Curso.carga_horaria','Curso.gratis','Curso.investimento','Curso.local_aula','Curso.informacoes','Curso.link_site','Curso.ativo'),$idc); }else{ $this->Curso->id = $id_curso; $this->data['Curso']['anunciante_id'] = $this->Auth->user('id'); if($this->Curso->saveAll($this->data)){ $this->Session->setflash('Curso editado com sucesso!'); }else{ $this->Session->setFlash('Falha ao editar o curso, verifique os campos!'); } } } VIEW:::: <? echo $html->css('formularios.css'); ?> <script> $('#abas li a:first').addClass("selected"); //seleciono aba de cursos function showHideInv(){ if(document.getElementById('CursoGratis').checked==true){ document.getElementById('CursoInvestimento').disabled=true; }else{ document.getElementById('CursoInvestimento').disabled=false; } } </script> <div class="formulario"> <h1>Alteracao de cursos</h1> <p>Altere os dados de seu curso de forma sábia, forneca o maior numero de informações possiveis ao usuario para ele ter certeza que seu curso é o que ele procura!</p><br /> <?=$session->flash();?> <h2>Alteracao</h2> <p>Campos com (*) sao obrigatorios</p> <span class="line_cad"></span> <?=$form->create('Curso',array('action'=>'perfil_editar'));?> <?=$this->data['Curso']['id'];?> <span style="width:627px; display:table; padding:3px; background-color:#f2f2f2;"> <p>Escolha em qual(is) filial(is) este curso tambem esta presente</p> <?=$form->input('Filial.id',array('type'=>'select','label'=>'','multiple'=>'checkbox','options'=>$filiais));?> </span> <?=$form->input('tipo_id',array('type'=>'select','options'=>$tipos,'after'=>'*')); ?> <?=$form->input('categoria_id',array('type'=>'select','options'=>$categorias,'after'=>'*')); ?> <? //$form->input('subcategoria_id',array('type'=>'select')); ?> <?=$form->input('modalidade_id',array('type'=>'select','options'=>$modalidades,'after'=>'*')); ?> <? $options_nivel = array('b'=>'Basico','m'=>'Medio','a'=>'Avancado','i'=>'Indiferente');?> <?=$form->input('nivel_curso',array('type'=>'select','options'=>$options_nivel,'after'=>'*')); ?> <? $options_periodo = array('m'=>'Manha','t'=>'Tarde','n'=>'Noite','f'=>'Flexivel');?> <?=$form->input('periodo',array('type'=>'select','options'=>$options_periodo,'after'=>'*')); ?> <?=$form->input('carga_horaria',array('type'=>'text','size'=>'10','after'=>' horas *')); ?> <!-- Dados do curso --> <?=$form->input('titulo',array('type'=>'text','size'=>'60','after'=>'*'));?> <?=$form->input('resumo',array('type'=>'textarea','after'=>'*'));?><br /> <?=$form->input('descricao',array('type'=>'textarea'));?> <?=$form->input('objetivo',array('type'=>'textarea'));?> <?=$form->input('metodologia',array('type'=>'textarea'));?> <?=$form->input('pre-requisitos',array('type'=>'textarea'));?> <?=$form->input('vantagens',array('type'=>'textarea'));?><br /> <span style="height:1px; display:block; clear:left; border-bottom:#CCC dashed 1px;"></span> <span style="width:100%; display:block; padding-left:130px; clear:left;"> Se você esta cadastrando um curso gratis marque abaixo: <?=$form->input('gratis',array('type'=>'checkbox','value'=>'s','label'=>'Este curso é gratis','onclick'=>'showHideInv();'));?> </span> <br /> <span style="height:1px; display:block; clear:left; border-bottom:#CCC dashed 1px;"></span> <br /> <?=$form->input('investimento',array('type'=>'text')); ?> <?=$form->input('local_aula',array('type'=>'textarea')); ?> <?=$form->input('informacoes',array('type'=>'textarea')); ?> <?=$form->input('link_site',array('type'=>'text')); ?> <?=$form->input('ativo',array('type'=>'select','options'=>array('s'=>'sim','n'=>'nao'))); ?> <?=$form->input('alteracao',array('type'=>'hidden','value'=>date('Y-m-d h:m:s'))); ?> <br /> <br /> <?=$form->end('Efetuar alteracao');?> </div> Outra duvida, quando eu to tentando cadastrar um relacionamento HABTM pelo que parece a query so cadastra em um model e no outro ela faz um consulta buscando um registro.. alguem sabe Brigadaooooo To usando o saveAll. Compartilhar este post Link para o post Compartilhar em outros sites
lucaswxp 22 Denunciar post Postado Março 1, 2010 Mostre o erro e apenas o código corresponde deste. Sobre HABTM o cakephp tem um pouco de problemas com ele. Esxiste um behavior chamado "Habtamable behavior", ele ajuda um pouco (você não precisa ficar dando join left etc...), mas como você está utilizando saveAll, ele não tem suporte =/ (por isso estou criando o meu) Compartilhar este post Link para o post Compartilhar em outros sites
Eduiagami 1 Denunciar post Postado Março 2, 2010 Mostre o erro e apenas o código corresponde deste. Sobre HABTM o cakephp tem um pouco de problemas com ele. Esxiste um behavior chamado "Habtamable behavior", ele ajuda um pouco (você não precisa ficar dando join left etc...), mas como você está utilizando saveAll, ele não tem suporte =/ (por isso estou criando o meu) Fala Lucas!!Tudo bom?? segue abaixo : Warning (2): Missing argument 1 for CursosController::perfil_editar(), called in C:\apache\htdocs\cliquecursos\cake\libs\object.php on line 116 and defined [APP\controllers\cursos_controller.php, line 122] Notice (8): Undefined variable: idc [APP\controllers\cursos_controller.php, line 123] Compartilhar este post Link para o post Compartilhar em outros sites
lucaswxp 22 Denunciar post Postado Março 2, 2010 Opa. Veja que, como definido na função, a argumento DEVE existir: function perfil_editar($idc){Então, a url, deve ser sempre algo como isso:/painel/cursos/editar/1532 Sempre deve ter aquele ultimo parâmetro. Para torna-lo "opcional": function perfil_editar($idc = null)Você define um valor padrão. Depois, basta tratar isso no proprio metodo Compartilhar este post Link para o post Compartilhar em outros sites
Eduiagami 1 Denunciar post Postado Março 2, 2010 Opa. Veja que, como definido na função, a argumento DEVE existir: function perfil_editar($idc){Então, a url, deve ser sempre algo como isso:/painel/cursos/editar/1532 Sempre deve ter aquele ultimo parâmetro. Para torna-lo "opcional": function perfil_editar($idc = null)Você define um valor padrão. Depois, basta tratar isso no proprio metodo Pow seria no caso tipo assim: Tenho um artigo, vou edita-lo, mas esqueço de um campo, ele da erro ai quando eu preencho o campo que esqueci e clico em alterar ao inves de alterar ele salva. Como procedo??? No controller e view?? abraços Compartilhar este post Link para o post Compartilhar em outros sites
lucaswxp 22 Denunciar post Postado Março 2, 2010 Não entendi a dúvida. O Cake só irá alterar se você definir o ID: $this->Model->id = $id; Compartilhar este post Link para o post Compartilhar em outros sites
Eduiagami 1 Denunciar post Postado Março 2, 2010 Não entendi a dúvida. O Cake só irá alterar se você definir o ID: $this->Model->id = $id; Quando há um erro de validacao e eu corrijo este erro e clico em alterar, eu nao consigo alterar, ele tentar criar um novo registro. como se $this->Model->id nao estivesse setado. Compartilhar este post Link para o post Compartilhar em outros sites
lucaswxp 22 Denunciar post Postado Março 2, 2010 Debugue e veja oque você poe em id. pr($idc); $this->Model->id = $idcSe você estiver passando um valor nulo será a mesma coisa que não definir o Model::$id... Compartilhar este post Link para o post Compartilhar em outros sites
Eduiagami 1 Denunciar post Postado Março 3, 2010 Debugue e veja oque você poe em id. pr($idc); $this->Model->id = $idcSe você estiver passando um valor nulo será a mesma coisa que não definir o Model::$id... Entao, o valor a falha ainda esta um ID (int), mas se eu apertar novamente em alterar o valor some, ai ao inves de ele alterar ele simplesmente cria um novo registro. abraços Muito obrigado. Compartilhar este post Link para o post Compartilhar em outros sites
Eduiagami 1 Denunciar post Postado Março 4, 2010 Resolvido solucao View - $action->create('Curso',array('url'=>array('controller'=>'cursos','action'=>'editar','perfil'=>true,$this->params['pass'][0]))); params é referente ao id que esta na url para assim quando submiter o formulario, o controller nao acusar falta de parametro CONTROLLER - Retirar $this->Model->saveAll() e colocar $this->Model->save(); abraços Agradecimentos especial ao Lucas_wxp O kra é fera msm! Compartilhar este post Link para o post Compartilhar em outros sites