Solucionado (ver solução)
Solucionado
(ver solução)
3
respostas

Duvida de Lógica ao Renderizar Metodo Cadastrar

Estou renderizando o meu método Cadastrar para Editar.

 public function editar($id){
        //$dados = $this->request->data();
        $turmasTable = TableRegistry::get('Turmas');
        $turma = $turmasTable->get($id);
        $this->set('turma', $turma);

        $this->render('cadastrar');
    }

Só que quando edito ele me da a mensagem de erro ou sucesso de cadastro..

public function cadastrarTurma(){
        $turmasTable = TableRegistry::get('Turmas');
        $turma = $turmasTable-> newEntity($this->request->data());

            if($turmasTable->save($turma)){
                $msg = 'Turma cadastrada com sucesso!';
                $this->Flash->set($msg,['element'=>'success']);
            }
            else {
                $msg = 'Erro ao cadastrar turma!';
                $this->Flash->set($msg,['element'=>'error']);
            }

                $this->redirect('/turmas/index');

    }

Como faço para validar(lógica do if).. quando o meu usuario altera um registro? no meu metodo cadastraTurma()

elseif(      ?     ) {
 $msg = 'Turma alterada com sucesso!';
 $this->Flash->set($msg,['element'=>'success']);
}
elseif(      ?     ) {
 $msg = 'Erro ao alterar turma!';
 $this->Flash->set($msg,['element'=>'error']);
}
3 respostas
solução!

Oi Janai, tudo bom?

Nesse caso, eu aconselho você fazer outro método para edição.

Um problema comum é quando colocamos muita responsabilidade em um controller/rota. As funcionalidades de salvar e editar são bem semelhantes e a gente acaba caindo na tentação de processar tudo no mesmo método.

Mas, isso acaba enchendo nosso código de ifs/elseifs. O ideal mesmo é separar essas responsabilidades, assim você consegue enviar suas mensagens corretamente pra cada caso =)

Caso você queira realmente processar ambos no mesmo método, uma possivel solução é verificar de qual url estamos utilizando o método cadastrarTurma:

public function cadastrarTurma(){
    $rota = Router::reverse($this->request, true);
     $turmasTable = TableRegistry::get('Turmas');
        $turma = $turmasTable-> newEntity($this->request->data());
    if($rota == "sua rota para salvar"){
            if($turmasTable->save($turma)){
                $msg = 'Turma cadastrada com sucesso!';
                $this->Flash->set($msg,['element'=>'success']);
            }
            else {
                $msg = 'Erro ao cadastrar turma!';
                $this->Flash->set($msg,['element'=>'error']);
            }
    } elseif($rota == "sua rota para editar") {
         // coloca sua mensagem de editado com sucesso
    }
                $this->redirect('/turmas/index');

    }

Percebe como nosso código ficou bem mais confuso? cheio de ifs e elses?

E mais, a gente verifica qual rota esta vindo para tomar uma decisão. Não é mais facil criar um método pra cada? =)

Qualquer dificuldade, compartilha com a gente!

Abraço e bons estudos.

Muito Obrigado! Vou separar mesmo.. Voce tem colaborado bastante na minha aprendizagem do cake Andre Chaves.. não so com os codigos mas o entendimento deles..

Continuei renderizando :

public function editar($id){
        //$dados = $this->request->data();
        $turmasTable = TableRegistry::get('Turmas');
        $turma = $turmasTable->get($id);
        $this->set('turma', $turma);

        $this->render('cadastrar');
    }

O que eu fiz pra resolver foi criar o metodo editarTurma()

public function editarTurma($id){
        $turmasTable = TableRegistry::get('Turmas');
        $turma = $turmasTable-> newEntity($this->request->data());
            if($turmasTable->save($turma)){
                $msg = 'Turma alterada com sucesso!';
                $this->Flash->set($msg,['element'=>'success']);
            }
            else {
                $msg = 'Erro ao alterar turma!';
                $this->Flash->set($msg,['element'=>'error']);
            }

            $this->redirect('/turmas/index');
    }

E para nao precisar ficar criando o formulario de novo, fiz um if pra validar se estava editando e cadastrando:

 <?= $this->Form->create($turma, ['url'=> ['controller'=>'turmas','action'=>((empty($turma['id']))? 'cadastrarTurma' : 'editarTurma' )],'class'=>'form-horizontal']);?>

E as mensagens agora esta ok.