Problema nas composições com imagem. Boa dia pessoal...Estou fazendo um cadastro de propostas onde eu tenho uma tabela de 'proposta' e outra de 'Proposta_foto', a composição entre os objetos acontece perfeitamente, posso criar, alterar e excluir o abjeto todo e suas partes; porém quando eu salvo o objeto as fotos não são movidas da pasta Temp do Framework para o diretório que eu escolhi e também quando eu excluo um objeto as...
JF
Problema nas composições com imagem.  
Boa dia pessoal...Estou fazendo um cadastro de propostas onde eu tenho uma tabela de 'proposta' e outra de 'Proposta_foto', a composição entre os objetos acontece perfeitamente, posso criar, alterar e excluir o abjeto todo e suas partes; porém quando eu salvo o objeto as fotos não são movidas da pasta Temp do Framework para o diretório que eu escolhi e também quando eu excluo um objeto as fotos não são apagadas da pasta Temp. Vou postar meu código.
Alguém pode me ajudar ?

 
  1. <?php
  2. $FOTO = new TFile('FOTO');
  3. ?>


 
  1. <?php
  2. public function onSave( $param )
  3. {
  4. try
  5. {
  6. TTransaction::open('db2'); // open a transaction
  7. $this->form->validate(); // validate form data
  8. $data = $this->form->getData();
  9. $proposta = new proposta;
  10. $proposta->fromArray( (array) $data);
  11. //PEGA AS COMPOSIÇÕES 'proposta_foto'
  12. $ts_foto = TSession::getValue('TS_foto');
  13. if ($ts_foto)
  14. {
  15. foreach($ts_foto as $lista_foto)
  16. {
  17. $proposta_foto = new proposta_foto;
  18. $proposta_foto->FOTO = $lista_foto['FOTO'];
  19. $proposta_foto->DESCRICAO = $lista_foto['DESCRICAO'];
  20. $proposta->addproposta_foto($proposta_foto);
  21. }//foreach
  22. }//$ts_foto
  23. $proposta->CORRETOR = $data->CODIGO;
  24. $proposta->USER_ID = 1; //TSession::getValue('userid');
  25. $proposta->USER_NAME = 'Admin' ;//TSession::getValue('username');
  26. $proposta->store();
  27. //copy file to target folder
  28. //$this->saveFile($proposta_foto, $data, 'FOTO', 'files/images');
  29. $this->saveFile($proposta, $data, 'FOTO', 'files/images');
  30. $this->form->setData($data);
  31. TTransaction::close(); // close the transaction
  32. new TMessage('info', TAdiantiCoreTranslator::translate('Record saved'));
  33. }//try
  34. catch(Exception $e)
  35. {
  36. new TMessage('error', $e->getMessage());
  37. $this->form->setData( $this->form->getData() );
  38. TTransaction::rollback(); // undo all pending operations
  39. }
  40. }//onSave
  41. ?>



 
  1. <?php
  2. class proposta Extends TRecord
  3. {
  4. const TABLENAME = 'PROPOSTA';
  5. const PRIMARYKEY = 'ID_PROPOSTA';
  6. const IDPOLICY = 'max';
  7. private $proposta_foto;
  8. private $nome_corretor;
  9. public function __construct($ID_PROPOSTA = NULL)
  10. {
  11. parent::__construct($ID_PROPOSTA);
  12. parent::addAttribute('CORRETOR');//FK FORNECEDOR
  13. parent::addAttribute('FUNCIONARIO');
  14. parent::addAttribute('DESCRICAO');
  15. parent::addAttribute('FOTO');
  16. parent::addAttribute('NOME');
  17. parent::addAttribute('CPF');
  18. parent::addAttribute('STATUS');
  19. parent::addAttribute('USER_ID');
  20. parent::addAttribute('USER_NAME');
  21. }//function __construct
  22. public function load($ID_PROPOSTA)
  23. {
  24. $this->proposta_foto = parent::loadComposite('proposta_foto', 'PROPOSTA_ID', $ID_PROPOSTA);
  25. return parent::load($ID_PROPOSTA);
  26. }//load
  27. public function store()
  28. {
  29. parent::store();
  30. //composição entre proposta e proposta_foto
  31. //tabela relacional , FK , id do obj , vetor
  32. parent::saveComposite('proposta_foto', 'PROPOSTA_ID', $this->ID_PROPOSTA, $this->proposta_foto);
  33. }//function store
  34. public function delete($ID_PROPOSTA = NULL)
  35. {
  36. $ID_PROPOSTA = isset($ID_PROPOSTA) ? $ID_PROPOSTA: $this->ID_PROPOSTA;
  37. parent::deleteComposite('proposta_foto', 'PROPOSTA_ID', $ID_PROPOSTA);
  38. parent::delete( $ID_PROPOSTA );
  39. }//function delete
  40. /*
  41. Add os 'proposta_foto's no array @$this->proposta_foto
  42. */
  43. public function addproposta_foto(proposta_foto $object)
  44. {
  45. $this->proposta_foto[] = $object;
  46. }//addproposta_foto
  47. /*
  48. retorna os 'proposta_foto' em forma de array
  49. */
  50. public function getproposta_foto()
  51. {
  52. return $this->proposta_foto;
  53. }//getproposta_foto
  54. /*
  55. retorna o nome do corretor
  56. */
  57. public function get_nome_corretor()
  58. {
  59. if(empty($this->nome_corretor))
  60. {
  61. $this->nome_corretor = new fornecedor($this->CORRETOR);//FK
  62. }
  63. return $this->nome_corretor;
  64. }//get_nome_corretor
  65. }//TRecord
  66. ?>



 
  1. <?php
  2. class proposta_foto Extends TRecord
  3. {
  4. const TABLENAME = 'PROPOSTA_FOTO';
  5. const PRIMARYKEY = 'ID_PROPOSTA_FOTO';
  6. const IDPOLICY = 'max';
  7. public function __construct($ID_PROPOSTA_FOTO = NULL)
  8. {
  9. parent::__construct($ID_PROPOSTA_FOTO);
  10. parent::addAttribute('PROPOSTA_ID');//FK PROPOSTA
  11. parent::addAttribute('FOTO');
  12. parent::addAttribute('DESCRICAO');
  13. }//function __construct
  14. }//TRecord
  15. ?>

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 (7)


JF

 
  1. <?php
  2. public function addFoto($param)
  3. {
  4. try
  5. {
  6. $data = $this->form->getData();
  7. if(empty($data->ID_FOTO))
  8. {
  9. $data->ID_FOTO = 1;
  10. }
  11. $ts_foto = TSession::getValue('TS_foto');
  12. //Da uma ID para foto
  13. $key = (int) $data->ID_FOTO;//campo oculto
  14. //add no array
  15. $ts_foto[$key] = array( 'FOTO' => $data->FOTO,
  16. 'ID_FOTO' => $data->ID_FOTO,
  17. 'DESCRICAO' => $data->DESCRICAO
  18. );
  19. //Limpa os campos
  20. $obj = new STDClass;
  21. $obj->DESCRICAO = '';
  22. $obj->FOTO = '';
  23. TForm::sendData('formProposta', $obj);
  24. $this->form->setData($data);
  25. //grava
  26. TSession::setValue('TS_data', $data);
  27. TSession::setValue('TS_foto', $ts_foto);
  28. //recarrega a página
  29. $this->onReload($param);
  30. }//try
  31. catch( Exception $e)
  32. {
  33. new TMessage('error', $e->getMessage() );
  34. TTransaction::rollback();
  35. }
  36. }//addFoto
  37. ?>
NR

Você está usando master/detail? A função saveFile não está preparada para esse tipo de formulário. Você vai ter que adaptar
JF

Sim estou usando como base o master/detail, adicionando as imagens em uma variável de sessão e salvando pelo método addproposta_foto...teria algum exemplo desta adaptação, tenho pouca experiência com programação não tenho ideia como adaptar a função saveFile. Alguém pode dar dicas de como fazer isso ?
JF

A imagem(obj parte) esta vinculada ao obj todo, ele grava no banco o endereço da imagem, trás a imagem certa porém não move a imagem da pasta Temp e não excluir após deletar o obj todo...imagino q não seja tão complexo de resolver para quem já tem mais experiência.
NR

Dá uma olhada na função saveFile. Lá tem todos os comandos para mover o arquivo.

Único detalhe é que você vai ter que fazer isso dentro do foreach, pois cada imagem precisa desse tratamento.
JF

Sim eu tava tentando adaptar a função nativa do php move_uploaded_file dentro do foreach no addproposta_foto, vou tentar fazer isso, a função saveFile é de qual classe, onde eu encontro ela ?
JF

Já achei, vou tentar adaptar...depois eu falo se deu certo ou não. Valeu Nataniel.