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

Não Salva o Produto

Não salva o produto, sempre cai no ELSE. Alguem pode me ajudar? Não da erro nenhum

public function salva(){
        $produtosTable = TableRegistry::get('Produtos');
        $dados = $this->request->data();

        $produto = $produtosTable->newEntity($dados);

        if ($produtosTable->save($produto)){
            $msg = "Salvo com sucesso";
        } else {
            $msg = "Erro ao salvar";
        }

        $this->set('msg',$msg);

    }
12 respostas

Todos campos obrigatórios estão sendo enviados (id, nome, preco e descricao) ?

Você pode usar

print_r($this->request->data()); exit;

Para checar se os valores estão sendo enviados.

esta sendo passado sim

Você usou os comandos abaixo, antes do if, para checar se os dados estão sendo enviados?

print_r($dados); 
echo "<br/>";
print_r($produto); 
echo "<br/>";
print_r($produtosTable->save($produto));
exit;

sim, mas ele nao imprime print_r($produtosTable->save($produto));

soh os dois primeiros

Você pode colocar aqui a saída da tela dos dois primeiros?

Array ( [Nome] => celular [Preço] => 999.99 [Descrição] => celular novo )

App\Model\Entity\Produto Object ( [Nome] => celular [Preço] => 999.99 [Descrição] => celular novo [[new]] => 1 [[accessible]] => Array ( [*] => 1 ) [[dirty]] => Array ( [Nome] => 1 [Preço] => 1 [Descrição] => 1 ) [[original]] => Array ( ) [[virtual]] => Array ( ) [[errors]] => Array ( ) [[invalid]] => Array ( ) [[repository]] => Produtos )

Você testou em outro momento a conexão com o banco de dados?

Checou no config/app.php se a configuração do banco está correta?

sim, pois ele traz os dados na grid! Onde lista os cadastrados que inseri na mão

A variável $msg deve ser declarada antes do IF para que ela continue existindo fora.

public function salva(){
        $produtosTable = TableRegistry::get('Produtos');
        $dados = $this->request->data();

        $produto = $produtosTable->newEntity($dados);

        $msg = "";

        if ($produtosTable->save($produto)){
            $msg = "Salvo com sucesso";
        } else {
            $msg = "Erro ao salvar";
        }

        $this->set('msg',$msg);

    }

Não consegui encontrar o motivo porque não está salvando !

Consegui resolver, a questão estava:

<?php 
    echo $this->Form->create($produto,['action'=>'salva']);
    echo $this->Form->input('nome');
    echo $this->Form->input('preco');
    echo $this->Form->input('descricao');
    echo $this->Form->button('Salvar');
    echo $this->Form->end();
?>

Pois ele não estava conseguindo fazer o biding dos campos, eu tinha colocado os atributos em maiusculo as iniciais

solução!

É verdade .

Não percebi quando você enviou o print

Array ( [Nome] => celular [Preço] => 999.99 [Descrição] => celular novo )

Muito obrigado pela sua atenção GABRIEL DE JESUS FILHO!

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software