Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Olá pessoal.
Estou aprendendo a trabalhar com o Cake.
Estou estudando um pdf que achei na internet, o cakebook.
Ele ensina a criar um pequeno blog.
Consegui criar o formulário para adicionar posts, consegui visualizar meus posts, ok.
mas quando chegou na parte de adicionar posts deu problema.
criei o formulário para adicionar posts, ok.
Submeto o formulário e aparece a mensagem de que o post foi salvo mas não vai nada para o mysql.
se eu insiro o post manualmente no mysql ele aparece na minha listagem, mas se envio através do formulário do cake, mesmo ele informando que o post foi salvo, ele não salva.
Alguém pode me ajudar?
Obrigado.
m@dDog,
obrigado pela força!
Código do PostsController.php
public function add()
{
if($this->request->is('post'))
{
debug($this->Post->save($this->request->data)); **//O debug que você mencionou...**
/*if($this->Post->save($this->request->data)) **//comentei o codigo para rodar apenas o debug**
{
$this->session->setFlash('Seu post foi salvo!');
$this->redirect(array('action' => 'index'));
}
else
{
$this->session->setFlash('Não foi possível adicionar seu post.');
}
}*/
}
}
O resultado foi esse:
array(
'Post' => array(
'Titulo' => 'Teste 2',
'Mensagem' => 'TEste 2 mensagem',
'modified' => '2012-09-21 19:45:20',
'created' => '2012-09-21 19:45:20',
'id' => '8'
)
)
app\Controller\PostsController.php (line 24)
Segue também o codigo do add.ctp
<h1>Cadastrar nova notícia</h1>
<?php
echo $this->Form->create('Post');
echo $this->Form->input('Titulo');
echo $this->Form->input('Mensagem', array('rows' => '3'));
echo $this->Form->end('Salvar o post!');
?>
Achei estranho que no formulário que criei só disponibilizei os campos 'Titulo' e 'Mensagem'. O SQL gerado está incluindo o 'modified' e o 'created' (não pedi isso no código!).
No banco de dados está sendo registrado o ID (normal), o titulo está NULL, a mensagem está NULL e a data de modificação e de criação não coincidem com a do meu computador.
Abrigado.
Fique tranquilo, está tudo funcionando corretamente, o CakePHP não está fazendo nada errado.
Confie no CakePHP, é um framework muito bem testado e muito usado. Até os programadores mais experientes acham que descobrem erros quando na verdade é o programador que errou.
Vou explicar o que está errado na sua aplicação.
Primeiro, o CakePHP por padrão insere os valores de created e modified nos registros, claro, sempre que você tiver esses campos definidos no seu banco de dados. Isso é para que o usuário saiba quando o registro foi inserido e quando foi alterado, é uma espécie de log simples.
As datas de criação e modificação não coincidem com os horários do seu computador, provavelmente porque sua aplicação está configurada para utilizar o horário UTC, você pode configurar a timezone em app/Config/core.php.
O CakePHP também tem alguns métodos prontos para converter as timezones com o CakeTime
E o motivo de não estar salvando, é que você está inserindo os nomes dos campos com letras maiúsculas em seu formulário.
O primeiro nome deve ser igual ao nome do campo no seu banco de dados.
Por exemplo:
echo $this->Form->input('title', array('label' => __('Título do Post')));
Diga ai se deu certo ou não...
Abs
>
Fique tranquilo, está tudo funcionando corretamente, o CakePHP não está fazendo nada errado.
Confie no CakePHP, é um framework muito bem testado e muito usado. Até os programadores mais experientes acham que descobrem erros quando na verdade é o programador que errou.
Vou explicar o que está errado na sua aplicação.
Primeiro, o CakePHP por padrão insere os valores de created e modified nos registros, claro, sempre que você tiver esses campos definidos no seu banco de dados. Isso é para que o usuário saiba quando o registro foi inserido e quando foi alterado, é uma espécie de log simples.
As datas de criação e modificação não coincidem com os horários do seu computador, provavelmente porque sua aplicação está configurada para utilizar o horário UTC, você pode configurar a timezone em app/Config/core.php.
O CakePHP também tem alguns métodos prontos para converter as timezones com o CakeTime
E o motivo de não estar salvando, é que você está inserindo os nomes dos campos com letras maiúsculas em seu formulário.
O primeiro nome deve ser igual ao nome do campo no seu banco de dados.
Por exemplo:
echo $this->Form->input('title', array('label' => __('Título do Post')));
Diga ai se deu certo ou não...
Abs
É isso mesmo m@dDog...
Agora deu certo!
Cadastrou legal...
Valeu parceiro...
Abraço.
Coloque os trechos de código das partes mais importantes, como por exemplo o método do controller.
Tente debugar os dados, mude o debug para 2 em app/Config/core.php, retire o redirecionamento do seu método no controller e observe o SQL que ele está tentando fazer.
Debug também os dados de entrada no seu método add() com o seguinte código:
debug($this->request->data)
Mas lembre-se de retirar o redirecionamento, senão logo que você tentar salvar a página será redirecionada e você não vai conseguir ler os dados que você está tentando imprimir.