Formule alguma coisa : Criando formulários em Zend Framework parte 3 :: Salvando dados enviados dos formulários
Agora, após termos criado o formulário ( parte 1 ) e criado os métodos de envio dos dados ( parte 2 ), vamos slavá-los num banco de dados.
Para inserir dados de seu formulario no banco de dados, usamos os models.
Abre um terminal e crie o model
Abra o arquivo 'models/Meumodel.php' e veja que dentro está assim, vaziozão:
Esse vai ser a classe com que você irá trabalhar os dados do banco de dados com o controller e vice-versa.
Em específico ao nosso caso, vai ser o responsável por salvar os dados do formulário no banco de dados.
Primeiro, setamos a tabela do banco de dados que será trabalhada, acrescentando uma variável protegida no model
e agora, o campo da tabela que trabalha como seu índice
Colocamos o campo 'id' como mera ilustração, pode ser qualquer outro campo, e no caso de você ter esquecido de declarar o campo índice, o Zend toma por padrão o primeiro campo chamado 'id' que porventura tenha na tabela. No caso de não haver um campo 'id' e você não ter declarado o campo índice, não sei o que acontece, por isso, é bem melhor declarar mesmo explicitamente o 'id' pra não correr riscos.
Agora, criemos no model a função que irá cadastrar o usuário
'$this->insert()' é o método da classe Zend_Db_Table que faz o trabalho sujo.
Agora, voltando ao nosso controller do formulario da parte 2 de nosso tutorial, lembremos que deixei uma parte escrito '<codigo surpresa>'
Referência: http://framework.zend.com/manual/en/zend.form.html http://framework.zend.com/manual/1.11/en/learning.quickstart.create-model.html
Para inserir dados de seu formulario no banco de dados, usamos os models.
Abre um terminal e crie o model
$ zf create model meumodel
Abra o arquivo 'models/Meumodel.php' e veja que dentro está assim, vaziozão:
class Model_Meumodel extends Zend_Db_Table { }
Esse vai ser a classe com que você irá trabalhar os dados do banco de dados com o controller e vice-versa.
Em específico ao nosso caso, vai ser o responsável por salvar os dados do formulário no banco de dados.
Primeiro, setamos a tabela do banco de dados que será trabalhada, acrescentando uma variável protegida no model
class Model_Meumodel extends Zend_Db_Table { protected $_name = 'minhatabela'; }
e agora, o campo da tabela que trabalha como seu índice
class Model_Meumodel extends Zend_Db_Table { protected $_name = 'minhatabela'; protected $_primary = 'id'; }
Colocamos o campo 'id' como mera ilustração, pode ser qualquer outro campo, e no caso de você ter esquecido de declarar o campo índice, o Zend toma por padrão o primeiro campo chamado 'id' que porventura tenha na tabela. No caso de não haver um campo 'id' e você não ter declarado o campo índice, não sei o que acontece, por isso, é bem melhor declarar mesmo explicitamente o 'id' pra não correr riscos.
Agora, criemos no model a função que irá cadastrar o usuário
class Model_Meumodel extends Zend_Db_Table { protected $_name = 'minhatabela'; protected $_primary = 'id'; /* * Função que insere dados na tabela */ public function insereDados($data){ // Insere os dados do array '$data' no banco de dados. // Caso não seja possível inserir no banco de dados retorna falso. try{ $this->insert($data); return true; } catch( Zend_Db_Exception $e){ return false; } } }
'$this->insert()' é o método da classe Zend_Db_Table que faz o trabalho sujo.
Agora, voltando ao nosso controller do formulario da parte 2 de nosso tutorial, lembremos que deixei uma parte escrito '<codigo surpresa>'
// Caso os dados sejam válidos. if( $form->isValid($data) ){ <codigo surpresa> <- olha a parte do código surpresa aqui }Pois bem, nessa parte, que fica logo depois de termos recebido os dados e depois deles term sido devidamente validados, é onde colocamos o resto do codigo
// Cria o objeto do model. $objeto_model = new Model_Meumodel(); // Tenta inserir os dados no db. // Caso dê certo, é impresso uma mensagem na view. if( $objeto_model->insereDados($data) ){ $mensagens = "Usuário criado com sucesso."; $this->view->mensagens = $mensagens; } // Caso dê algo errado com a inserção no banco de dados, // é impresso uma mensagem de erro e voltamos ao formulário // com os dados populado, para caso seja algum problema de // digitação. else{ $this->view->mensagens = "Não foi possível criar usuário."; // Reenvia os dado para o formulário. $form->populate($data); $this->view->formulario = $form; }E assim completamos nosso formulário em Zend. Basta testar e usar.
Referência: http://framework.zend.com/manual/en/zend.form.html http://framework.zend.com/manual/1.11/en/learning.quickstart.create-model.html
olá, como eu especifico qual o campo do banco de dados ele deve inserir a informação que veio do formulário?
ResponderExcluirOlá Dayhan.
ResponderExcluirQuando você cria um form pro formulário, você dá o nome do campo que está no db.
Na parte 1 deste meu tutorial ( http://bardozend.blogspot.com/2011/06/formule-alguma-coisa-criando.html ) você vai ver que tem um form tipo 'text' com nome 'nomedoform'.
Esse 'nomedoform' seria o nome do campo na tabela do db.
Mas claro que não é regra, você pode por exemplo no controller, criar um array com os nomes dos campos do db nas chaves, e pegar os dados enviados via post para salvar nas chaves certas do novo array, e enviar pro model certinho.
O importante é somente enviar pro model um array com os nomes dos campos no db certinho, o método de fazer isso fica a seu critério.
Abraços.
ótima dica, Parabéns..
ResponderExcluirObrigado Elinis ^^
ResponderExcluirBoa tarde Albert,
ResponderExcluirEstou com um grande problema para relacionar tabelas no zend. Testei minhas models inserindo dados e consultando em uma única tabela e deu tudo certo, mas quando tento inserir em todas ao mesmo tempo não sai nada. Já segui vários tutorias e não deu certo. Caso vc tenha alguma solução para o meu caso, um bom exemplo para que eu possa seguir, me passa aí por favor.
Valeu.
Olá Elbes Alves.
ExcluirTalzes seja o caso de você criar uma função no model principal que aceite como entrada um array '$data' com os campos e seus respectivos valores, e dentro dessa função você insere/atualiza os dados de cada campo em sua respectiva tabela, inclusive usando o relacionamento do post aqui, mas no caso, apenas para pegar os id´s para inserir/atualizar no lugar certo.
Abraços.