RSS
 

Archive for março, 2010

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.