RSS
 

Como fazer upload de imagens usando Zend Framework

25 mar

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:

  1. Como estruturar uma aplicação completa usando Zend Framework
  2. Como configurar uma aplicação completa usando Zend Framework
  3. Como criar um sistema de login com Zend Framework
  4. Como criar conexão com banco de dados MySQL usando Zend Framework
  5. Como criar um formulário com Zend_Form
 

Leave a Reply

 
 
  1. Falci

    25/03/2010 at 16:44

    Existe um “jeito Zend” de fazer redimensionamento das imagens?
    Ou somente usando classe separadas?

     
  2. Daniel Developer

    26/03/2010 at 03:45

    Falci,

    eu desconheço uma função zend que faça o redimensionamento da imagens.

     
  3. 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

     
  4. 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 [...]

     
  5. Amy

    18/04/2010 at 17:30

    Falci,

    eu desconheço uma função zend que faça o redimensionamento da imagens.

     
  6. 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?

     
  7. Adriano Andrade

    27/04/2010 at 06:51

    Adriano Andrade :
    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 e também no topo ai do site nos destaques nao estao aparecendo as imagens… nao sei se é algo errado com o baseURL()… não entendo qse nada de Zend… pode me ajudar?

     
  8. 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.

     
  9. Felipe Duardo

    12/05/2010 at 05:49

    Ótimo artigo!
    posso usar o File_Transfer para varios input files?

     
  10. Daniel Developer

    13/05/2010 at 15:37

    Felipe,

    Creio que sim, de que forma vai utilizar?

     
  11. 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.

     
  12. Daniel Developer

    03/06/2010 at 12:24

    Alessandro, verifique se no seu código você não colocou nenhum validador de extensão.