Solucionado (ver solução)

Importante

Você está vendo a versão anterior da nova experiência da Alura que estamos preparando para você. Em breve, ela ganha uma identidade visual novinha totalmente pensada em potencializar seus estudos!

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!