Olá developers,
hoje vamos aprender como fazer upload de imagens usando Zend Framework. Vale lembrar que o exemplo que vou citar aqui segue a estrutura e configuração do nosso Sample Project.
Criando o Formulário
Primeiramente criaremos nosso formulário chamado UploadImage.php contendo um campo do tipo file e um botão para submeter. Esse formulário será criado no diretório library/Sample/Form/ que é onde armazeno todos os formulários da aplicação. O local onde será criado o formulário fica a critério de cada um.
Segue o código do formulário:
class Sample_Form_UploadImage extends Zend_Form
{
public function init()
{
// Seta a action do formulário
$this->setAction('');
// Seta o método de envio do formulário como POST
$this->setMethod( Zend_Form::METHOD_POST );
// Seta o enctype do formulário para upload de arquvos
$this->setEnctype( Zend_form::ENCTYPE_MULTIPART );
// Inicia aqui a criação e configuração do campo file_image
$file_image = new Zend_Form_Element_File('file_image');
$file_image ->setLabel('Selecione a imagem')
->setRequired(true)
->addValidator( new Zend_Validate_File_Extension('jpeg','jpg','gif','png') );
// Inicia aqui a criação e configuração do botão de submit
$submit = new Zend_Form_Element_Submit('submit');
$submit->setLabel('Fazer upload');
// Adiciona os elementos ao formulário
$this->addElements(array(
$file_image,
$submit
));
}
}
Note que aplicamos um validador para as extensões do arquivo, validando apenas extensões de imagens, JPEG, JPG, GIF e PNG.
Configurando o Controller
Em algum controller de sua aplicação, instancie o formulário de upload de imagens e defina alguns métodos que serão chamados para que o upload ocorra perfeitamente. Eu utilizei o indexController para o exemplo, veja abaixo:
class IndexController extends Zend_Controller_Action
{
public function init()
{
/* Initialize action controller here */
}
public function indexAction()
{
// Instancia o formulário
$objFormImageUpload = new Sample_Form_UploadImage();
// Envia para a view
$this->view->objFormUploadImage = $objFormImageUpload;
// Verifica se foi uma requisição POST
if( !$this->_request->isPost() )
return false;
// Capturamos aqui o dados enviados via post
$data = $this->_request->getPost();
// Verifica se os dados do formulário são válidos
if( !$objFormImageUpload->isValid($data) )
return false;
// Instancia o adaptador do Zend para tranferência de arquivos via
// protocolo Http e definine o destino do arquivo
$upload_adapter = new Zend_File_Transfer_Adapter_Http();
$upload_adapter->setDestination( UPLOAD_PATH );
if( $upload_adapter->receive() )
echo 'Upload efetuado com sucesso';
else
echo 'Ops! Ocorreu um erro ao enviar o arquivo';
}
}
Exibindo na View
Na view respectiva ao seu controller, exiba o formulário.
echo $this->objFormUploadImage;
Conclusão
Bom, esse é um exemplo simples de como fazer upload de imagens usando o Zend Framework, para se aprofundar mais no assunto, visualize a documentação.
Nota: Para fazer o upload de arquivos em geral, de qualquer extensão, apenas retire a validação de extensões. Simples não?
Comentem suas dúvidas, críticas e sugestões.
Até a próxima.
Artigos relacionados:
- Como estruturar uma aplicação completa usando Zend Framework
- Como configurar uma aplicação completa usando Zend Framework
- Como criar um sistema de login com Zend Framework
- Como criar conexão com banco de dados MySQL usando Zend Framework
- Como criar um formulário com Zend_Form
Falci
25/03/2010 at 16:44
Existe um “jeito Zend” de fazer redimensionamento das imagens?
Ou somente usando classe separadas?
Daniel Developer
26/03/2010 at 03:45
Falci,
eu desconheço uma função zend que faça o redimensionamento da imagens.
Daniel Developer
26/03/2010 at 14:06
Segundo meu parceiro @mauriciotauth, já está sendo desenvolvido um componente para trabalhar com imagens. Chama-se Zend_Image. http://bit.ly/6W93YF
Tweets that mention Como fazer upload de imagens usando Zend Framework « Daniel Developer -- Topsy.com
27/03/2010 at 05:13
[...] This post was mentioned on Twitter by Daniel Developer. Daniel Developer said: Forma simples fazer upload de imagens usando Zend Framework http://bit.ly/blYqH7 #zf [...]
Amy
18/04/2010 at 17:30
Falci,
eu desconheço uma função zend que faça o redimensionamento da imagens.
Adriano Andrade
27/04/2010 at 06:47
Olá Daniel, não sei se é neste post que deveria comentar mas lá vai.
estou com um problema no site: http://prefeitura.skas.com.br/
tem imagens que não aparecem, veja na barra direita em Agenda de Eventos e em Vídeos mais embaixo… nao sei se é algo errado com o baseURL()… não entendo qse nada de Zend… pode me ajudar?
Adriano Andrade
27/04/2010 at 06:51
Daniel Developer
28/04/2010 at 03:38
Adriano,
o Zend as vezes dá muito trabalho, principalmente com códigos fora dos padrões. Faça correções em seu código como as tags < ?php ?> ao invés de < ?= ?> e alguns ;(ponto-virgula) no final das instruções. Isso ocorre devido a servidores diferentes. Tente sempre fechar as instruções e usar as tags php padrões.
Felipe Duardo
12/05/2010 at 05:49
Ótimo artigo!
posso usar o File_Transfer para varios input files?
Daniel Developer
13/05/2010 at 15:37
Felipe,
Creio que sim, de que forma vai utilizar?
Alessandro
21/05/2010 at 12:45
Daniel,
Quando submeto o form aparece esta mensagem “File ‘teste.gif’ has a false extension”, não importa o formato de arquivo que seleciono para update (jpg,gif,png).
Tem idéia do que pode ser?
Obrigado.
Daniel Developer
03/06/2010 at 12:24
Alessandro, verifique se no seu código você não colocou nenhum validador de extensão.