Como acessar as informações de um input tipo FILE? Bom dia galera, é muito besta e simples de fazer acesso a um input do tipo FILE, o caso é que ao clicar no botão no onSave, ele sempre esta vazio... Dúvida, como faço para acessar esse tipo de variável?... ...
WS
Como acessar as informações de um input tipo FILE?  
Bom dia galera, é muito besta e simples de fazer acesso a um input do tipo FILE, o caso é que ao clicar no botão no onSave, ele sempre esta vazio...
Dúvida, como faço para acessar esse tipo de variável?...
 
  1. <?php
  2. $this->form = new TForm($this->nameFormMain);
  3. $this->form->class = 'form-horizontal form-bordered';
  4. $arquivo_id = new WFile('file');
  5. $arquivo_id->setLabel('Arquivo retorno');
  6. $arquivo_id->{'placeholder'} = "Arquivo retorno";
  7. $arquivo_id->setSize('40%');
  8. $this->formFields = array( $arquivo_id, $buttonSave);
  9. $this->form->setFields( $this->formFields );
  10. Onsave:
  11. $data = $this->form->getData();
  12. var_dump(data);
  13. ?>


Na classe WFile eu tenho :
 
  1. <?php
  2. class WFile extends TField implements AdiantiWidgetInterface
  3. {
  4. /**
  5. * Show the widget at the screen
  6. */
  7. public function show()
  8. {
  9. // set the tag properties
  10. $this->tag-> name = $this->name; // tag name
  11. $this->tag-> value = $this->value; // tag value
  12. $this->tag-> type = 'file'; // input type
  13. $this->tag-> style = "width:{$this->size}";
  14. // shows the widget
  15. $this->tag->show();
  16. }
  17. }
  18. ?>


Obrigado.

Curso Dominando o Adianti Framework

O material mais completo de treinamento do Framework.
Curso em vídeo aulas + Livro completo + Códigos fontes do projeto ERPHouse.
Conteúdo Atualizado!


Dominando o Adianti Framework Quero me inscrever agora!

Comentários (8)


WS

Faltou um o cifrão da variável:
 
  1. <?php
  2. var_dump($data);
  3. ?>
WS

No arquivo TFILE temos:
 
  1. <?php
  2. /**
  3. * Show the widget at the screen
  4. */
  5. public function show()
  6. {
  7. // define the tag properties
  8. $this->tag-> id = $this->id;
  9. $this->tag-> name = 'file_' . $this->name; // tag name
  10. $this->tag-> value = $this->value; // tag value
  11. $this->tag-> type = 'file'; // input type
  12. $this->tag-> style = "width:{$this->size}px;height:{$this->height}px"; // size
  13. $hdFileName = new THidden($this->name);
  14. $hdFileName->setValue( $this->value );
  15. $complete_action = "'undefined'";
  16. // verify if the widget is editable
  17. if (parent::getEditable())
  18. {
  19. if (isset($this->completeAction))
  20. {
  21. if (!TForm::getFormByName($this->formName) instanceof TForm)
  22. {
  23. throw new Exception(AdiantiCoreTranslator::translate('You must pass the ^1 (^2) as a parameter to ^3', __CLASS__, $this->name, 'TForm::setFields()') );
  24. }
  25. $string_action = $this->completeAction->serialize(FALSE);
  26. $complete_action = "function() { __adianti_post_lookup('{$this->formName}', '{$string_action}', this); }";
  27. }
  28. }
  29. else
  30. {
  31. // make the field read-only
  32. $this->tag-> readonly = "1";
  33. $this->tag-> type = 'text';
  34. $this->tag->{'class'} = 'tfield_disabled'; // CSS
  35. }
  36. $div = new TElement('div');
  37. $div-> style="display:inline;width:100%;";
  38. $div-> id = 'div_file_'.mt_rand(1000000000, 1999999999);
  39. $div->add( $hdFileName );
  40. $div->add( $this->tag );
  41. $div->show();
  42. $action = "engine.php?class={$this->uploaderClass}";
  43. TScript::create(" tfile_start( '{$this->tag-> id}', '{$action}', '{$div-> id}', {$complete_action});");
  44. }
  45. ?>

No caso ele cria um input do tipo file e já faz upload do arquivo para a pasta /temp...
Eu não queria fazer isso, só queria fazer upload quando eu clicar no botão ENVIAR...


No caso eu teria que ter o input no construtor e o upload no método onSave()..

Se eu consegui-se acessa o $_FILE eu já teria resolvido... o problema esta em acessar essa variável....

Alguma ideia?....
NR

A requisição normal do formulário por ajax não possibilita a utilização da variável $_FILES.

A requisição deve ser feita de outra forma, um pouco mais complicada. Veja o arquivo tfile.js
WS

Eu olhei, será que alguém já usou algo assim?..alguem pode ajudar???
MG

Nesse caso, crie uma rotina no cronjob e faça a limpeza temporária.
Ao utilizar o rename, o arquivo é movido automaticamente, executando um processo de limpeza no tmp, você mantém o servidor livre de arquivos indesejados!
Eu implementei assim e funciona muito bem!
WS

Marcelo, como ficou seu código cronjob ?..posta ai se puder..
MG

O framework tem um arquivo na raiz cmd.php que permite a execução de classes e métodos em linha de comando.
Você cria uma classe e um método como outro qualquer, mas neste caso não precisa extends TPage ou TWindow.

O comado php para apagar arquivos em php é o unlink.
 
  1. <?php
  2. Class Arquivo
  3. {
  4. public function removerArquivos
  5. {
  6. $types = array( 'png', 'jpg', 'jpeg', 'gif' );
  7. if ( $handle = opendir('pasta_desejada') ) {
  8. while ( $entry = readdir( $handle ) ) {
  9. $ext = strtolower( pathinfo( $entry, PATHINFO_EXTENSION) );
  10. if( in_array( $ext, $types ) ) echo unlink($entry);
  11. }
  12. closedir($handle);
  13. }
  14. }
  15. ?>


Linux = cron
Windows = Task Manager

Linha de comando a ser inserida no cronjob: php /pastaprojeto/cmd.php?class=Arquivo?method=removerArquivos


MG

Willian
Outra solução. Ao final do método 'onDelete', você poder usar o unlink também, assim:

 
  1. <?php
  2. public function onDelete($param){
  3. ...
  4. unlink($storage_path.'/'.$file);
  5. ...
  6. }
  7. ?>