Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Eu novamente rsrs ... da até vergonha de ficar postando com tantas dúvidas mas não encontro o problema e eu segui praticamente todos tutoriais da internet que eu encontrei e nenhum funciona!
Estou acompanhando este tutorial:
http://www.pauloeduardo.com/2011/06/01/upload-de-arquivos-com-zend-framework/
E meu codigo do form DEPOIMENTOS fica assim:
$thumb = new Zend_Form_Element_File('thumb');
$thumb->setLabel('Foto:')
->addValidator('Extension', false, array('jpg', 'png', 'gif'))
->addValidator('Size', false, 102400)
->setDestination('midias/depoimentos');
e meu controller:
// Instanciar a ação do formulário
$this->_formdepoimentos->setAction('/depoimentos/criar');
// Instanciar "formularioDepoimentos" para recuperar os dados na página
$this->view->formularioDepoimentos = $this->_formdepoimentos;
// Verificar se a requisição foi realizada via POST
if ($this->_request->isPost() )
{
// ARRAY $data com o dados fornecido pelo FORMULARIO
$data = array(
'id' => $this->_request->getPost('id'),
'thumb' => $this->_request->getPost('thumb'),
'titulo' => $this->_request->getPost('titulo'),
'gravata' => $this->_request->getPost('gravata'),
'texto' => $this->_request->getPost('texto'),
'cliente' => $this->_request->getPost('cliente'),
'projeto' => $this->_request->getPost('projeto'),
'tecnologia' => $this->_request->getPost('tecnologia'),
'site' => $this->_request->getPost('site')
);
if ( ! $this->_depoimentos->idUnica($data['id']) )
{
$this->view->mensagem = sprintf('Já existe um depoimento cadastrado com o ID "%s"', $data['id']);
return FALSE;
}
$this->_depoimentos->insert($data);
$this->view->mensagem = "Depoimento cadastrado com sucesso!";
}
Quando eu cadastro ele da cadastrado com sucesso....
Mas no phpmyadmin quando eu olho as tabelas ele cadastra sempre como NULL
minha coluna THUMB(do upload) esta neste padrão:
thumb text latin1_swedish_ci Sim NULL
Valeu Gente =D
Ah verdade... eu tinha tentado usar aquele código no meu controlle mas só dava erro... depois descobri que falta 2 " ; " e um " ) " para fechar por isso acusava no erro...
Agora meu controller ficou assim:
public function criarAction()
{
if ( !Zend_Auth::getInstance()->hasIdentity() ) {
return $this->_helper->redirector->goToRoute( array('controller' => 'auth'), null, true);
}
// Instanciar a ação do formulário
$this->_formdepoimentos->setAction('/depoimentos/listar');
// Instanciar "formularioDepoimentos" para recuperar os dados na página
$this->view->formularioDepoimentos = $this->_formdepoimentos;
// Verificar se a requisição foi realizada via POST
if($this->getRequest()->isPost() and $this->_formdepoimentos->isValid($_POST)){
$imageAdapter = new Zend_File_Transfer_Adapter_Http();
$imageAdapter->setDestination('midias/depoimentos');
if(is_uploaded_file($_FILES['thumb']['tmp_name'])){
if(!$imageAdapter->recive['thumb']){
$messages = $imageAdapter->getMessages['thumb'];
}else{
$filename = $imageAdapter->getFileName('thumb');
}
}else{
}
// ARRAY $data com o dados fornecido pelo FORMULARIO
$data = array(
'id' => $this->_request->getPost('id'),
'thumb' => $this->_request->getPost('thumb'),
'titulo' => $this->_request->getPost('titulo'),
'gravata' => $this->_request->getPost('gravata'),
'texto' => $this->_request->getPost('texto'),
'cliente' => $this->_request->getPost('cliente'),
'projeto' => $this->_request->getPost('projeto'),
'tecnologia' => $this->_request->getPost('tecnologia'),
'site' => $this->_request->getPost('site')
);
if ( ! $this->_depoimentos->idUnica($data['id']) )
{
$this->view->mensagem = sprintf('Já existe um depoimento cadastrado com o ID "%s"', $data['id']);
return FALSE;
}
$this->_depoimentos->insert($data);
$this->view->mensagem = "Depoimento cadastrado com sucesso!";
}
}
Eu consegui fazer eles validarem.. antes voce clicava em enviar ele cadastrava ... coloquei a linha $this_formdepoimentos e agora ele ta validando tudo certinho INCRIVEL!
Porém não funciona.. continua recebendo nulo no meu banco ... a imagem não vai para a pasta nem a pau...
muito estranho pois se eu tentar enviar um arquivo acima de 100k ele diz que não pode.. ou extensão .psd ele diz que é invalido... ou seja funcionando esta parte toda esta e ta tudo validado mas nao upa os arquivos!
Você está complicando o que é simples.
$thumb = new Zend_Form_Element_File('thumb');
$thumb->setLabel('Foto:')
->addValidator('Extension', false, array('jpg', 'png', 'gif'))
->addValidator('Size', false, 102400)
->setDestination('midias/depoimentos');
Se você fez assim, você está definindo o destino do seu arquivo e não precisa fazer mais nada. Ao receber os valores do formulário ($form->getValues()) ele vai fazer o processo de upload e gravar nesta pasta. No seu controller, fica assim:
public function criarAction()
{
if ( !Zend_Auth::getInstance()->hasIdentity() ) {
return $this->_helper->redirector->goToRoute( array('controller' => 'auth'), null, true);
}
// Instanciar a ação do formulário
$this->_formdepoimentos->setAction('/depoimentos/listar');
// Instanciar "formularioDepoimentos" para recuperar os dados na página
$this->view->formularioDepoimentos = $this->_formdepoimentos;
// Verificar se a requisição foi realizada via POST
if($this->getRequest()->isPost() and $this->_formdepoimentos->isValid($_POST)){
$data = $this->_formdepoimentos->getValues();// aqui $data recebe os valores do formulário, inclusive o nome do arquivo.
if ( ! $this->_depoimentos->idUnica($data['id']) )
{
$this->view->mensagem = sprintf('Já existe um depoimento cadastrado com o ID "%s"', $data['id']);
return FALSE;
}
$this->_depoimentos->insert($data);
$this->view->mensagem = "Depoimento cadastrado com sucesso!";
}
}
Feito. Veja se vai dar certo.
Carlos Eduardo
Cara você é um genio!!! Eu não tenho conhecimento no zend.. fiz um curso na ENG mas não adiantou de nada pois não consigo montar quase nada sozinho ... tem alguma dica? um livro? que eu possa estudar assim eu ñao fico enxendo o saco aqui ;P
Funcionou PERFEITAMENTE !!!
Muito obrigado =D
Vou finaizar meu site e publicar ele (ja deu erro para publicar hahaha) mas vou tentar de todos os jeitos possiveis publicar ele até funcionar(ou não).
Com certeza vou citar você e o forum iMaster no meu portal porquê realmente sem este forum eu não tinha passado do meu formulário =D
Abraços e até!
Olha, o tutorial que você linkou está bem direitinho. Você está fazendo beeeemmm diferente do que ele colocou lá.
Veja que ele faz a validação dos dados ($form->isValid($_POST)), algo que você não faz (pelo menos no trecho atual).
Além disto, você precisa, para que o formulário funcione corretamente, inserir os valores do formulário (feito no método isValid()) e depois pegar os valores de dentro dele (pois é neste momento que são feitos os filtros que você tiver definido no form), utilizando $form->getValues() (onde $form é a instância do seu formulário).
Vai tentando fazer e poste as suas dúvidas e como tentou fazer.
Carlos Eduardo