Esse post é dedicado a você que precisa fazer upload multiplo de arquivo com zend, para isso alguns detalhes antes...
Entender o que vamos fazer...
Vc que precisa fazer upload multiplo com zend framework sua solução esta aqui, e o que é melhor ainda não vamos criar diversos inputs mas sim utilizar o nosso grande amigo JQUERY para organizar esse FRONTEND e com um único input vamos inserir todos os arquivos que nos interessar...
O que vc precisa saber para entender o tutorial...
Enteder MVC é essencial, e um pouco do funcionamento do ZEND FRAMEWORK é interessante, mas se vc utilizar outro framework como CODEIGNITER, CAKE,SYMPHONY ou YII irá entender perfeitamente tudo que irei explicar aqui.
Carregue esses arquivos na view:
Enteder MVC é essencial, e um pouco do funcionamento do ZEND FRAMEWORK é interessante, mas se vc utilizar outro framework como CODEIGNITER, CAKE,SYMPHONY ou YII irá entender perfeitamente tudo que irei explicar aqui.
Mãos a 'OBRA'...
Uma vez que o importante aqui é entender como montar esse multiplo upload com ZEND então vamos separar duas partes apenas do MVC que são o CONTROLLER (onde vamos montar a lógica do negócio) e a VIEW (onde vamos receber os arquivos pelo usuário).
Vamos usar 3 arquivos somente
No Controller
IndexController.php
E na View (INDEX)
index.phtml e envia.phtml
No Controller
IndexController.php
E na View (INDEX)
index.phtml e envia.phtml
Vamos começar pelo FRONTEND ou seja, pelo JQUERY...
Para inserir vários arquivos em um unico input utilizamos o plugin do JQUERY Multifile.
Para inserir vários arquivos em um unico input utilizamos o plugin do JQUERY Multifile.
Carregue esses arquivos na view:
- <?php
- $this->headScript()->appendFile($this->baseUrl().'/js/jquery.js');
- $this->headScript()->appendFile($this->baseUrl().'/js/jquery.MetaData.js');
- $this->headScript()->appendFile($this->baseUrl().'/js/jquery.MultiFile.js');
- ?>
OBSERVAÇÃO: Preste atenção na chamada, eu coloquei os arquivos la na min ha public dentro do diretório js que eu mesmo criei, essa chamada deve ficar clara, é bem simples para você que esta acostumado mas vc que costuma chamar arquivos js e folhas de estilo procure lêr algo sobre o assunto pois a estrutura de diretório do zend é diferente.
Vamos para o simples html de upload da imagem:
- <form name="fotos" action="/index/envia" method="POST" enctype="multipart/form-data">
- <input type="file" name="foto[]" class="multi" accept="jpeg|jpg|png|gif" maxlength="20" />
- <button name="enviar" >enviar </button>
- </form>
Vc que esta acostumado com isso é simples mas vamos explicar:
1º Criamos o formulario mandando para a enviaAction do controller q vamos criar em breve...
2º Montamos o input colocando como nome um tipo array "foto[]" e inserindo a classe "multi" (isso é necessário para chamar o multifle)
Ainda colocamos o parametro accept e quais formatos vamos aceitar o | serve para separar, por fim o maxlength que define a quantidade de arquivos que vamos aceitar, nesse caso aceito apenas 20 arquivos.
Percebem a velocidade q fizemos algo que alem de visualmente legal é bem funcional?
Bem, terminando o front end vamos abrir o arquivo IndexController.php
2º Montamos o input colocando como nome um tipo array "foto[]" e inserindo a classe "multi" (isso é necessário para chamar o multifle)
Ainda colocamos o parametro accept e quais formatos vamos aceitar o | serve para separar, por fim o maxlength que define a quantidade de arquivos que vamos aceitar, nesse caso aceito apenas 20 arquivos.
Percebem a velocidade q fizemos algo que alem de visualmente legal é bem funcional?
Bem, terminando o front end vamos abrir o arquivo IndexController.php
Vamos criar a action q ja falei 2 vezes acima... a tal da enviaAction:
public function enviaAction(){
}
...dentro dela vamos receber o arquivo utilizando a classe Zend_File_Transfer_Adapter_Http
- public function enviaAction() {
- /* Instancia Zend_File_Transfer_Adapter_Http */
- $upload = new Zend_File_Transfer_Adapter_Http();
- /* Destino do arquivo */
- $upload->setDestination('temp/');
- /* Pega info dos files */
- $files = $upload->getFileInfo();
- /* Faz laço dos files */
- foreach ($files as $file => $info) {
- /* Verifica se é valido */
- if ($upload->isValid($file)) {
- /* Sobe */
- $upload->receive($file);
- }
- }
Vou explicar apenas o foreach pois os comentários estão bem intuitvos...
utilizamos o metodo getFileInfo(); da classe chamada, com ele transformamos nosso objeto $files em um array de dados e após esse array é só jogar no foreach perguntar se é valido e utilizar o método receive inserindo o indice que é o arquivo propriamente dito.
Mas e ai pv pq vc criou o envia.phtml na view?
Resposta: A para exibir alguma mensagem do tipo "Arquivo enviado com sucesso" o correto era fazer o teste no controller e passar para a view um resultado tipo assim
$this->view->result = $resultadocontroller....
Espero ter ajudado, vou arrumar meu esquema de cod pq escrever aqui fica maio bizarro hehehe...
Qualquer dúvida estamos ai =]
Qualquer dúvida estamos ai =]
O link para donwload esta off, tem como arrumar. Obrigado.
ResponderExcluirLegal o post valeu!
ResponderExcluirO plugin esta certo... http://www.fyneworks.com/jquery/multiple-file-upload/
Parabéns ótimo tuto,
ResponderExcluirAjudou bastante, ia fazer uma pohhada de outra coisa e não sabia que o ZEND tinha essa.
#ZendParaTodos
Se eu quiser renomear o arquivo entes do upload como faria?
ResponderExcluir