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 ?
Alguém pode me ajudar ?
- <?php
- $FOTO = new TFile('FOTO');
- ?>
- <?php
- public function onSave( $param )
- {
- try
- {
- TTransaction::open('db2'); // open a transaction
- $this->form->validate(); // validate form data
- $data = $this->form->getData();
- $proposta = new proposta;
- $proposta->fromArray( (array) $data);
- //PEGA AS COMPOSIÇÕES 'proposta_foto'
- $ts_foto = TSession::getValue('TS_foto');
- if ($ts_foto)
- {
- foreach($ts_foto as $lista_foto)
- {
- $proposta_foto = new proposta_foto;
- $proposta_foto->FOTO = $lista_foto['FOTO'];
- $proposta_foto->DESCRICAO = $lista_foto['DESCRICAO'];
- $proposta->addproposta_foto($proposta_foto);
- }//foreach
- }//$ts_foto
- $proposta->CORRETOR = $data->CODIGO;
- $proposta->USER_ID = 1; //TSession::getValue('userid');
- $proposta->USER_NAME = 'Admin' ;//TSession::getValue('username');
- $proposta->store();
- //copy file to target folder
- //$this->saveFile($proposta_foto, $data, 'FOTO', 'files/images');
- $this->saveFile($proposta, $data, 'FOTO', 'files/images');
- $this->form->setData($data);
- TTransaction::close(); // close the transaction
- new TMessage('info', TAdiantiCoreTranslator::translate('Record saved'));
- }//try
- catch(Exception $e)
- {
- new TMessage('error', $e->getMessage());
- $this->form->setData( $this->form->getData() );
- TTransaction::rollback(); // undo all pending operations
- }
- }//onSave
- ?>
- <?php
- class proposta Extends TRecord
- {
- const TABLENAME = 'PROPOSTA';
- const PRIMARYKEY = 'ID_PROPOSTA';
- const IDPOLICY = 'max';
- private $proposta_foto;
- private $nome_corretor;
- public function __construct($ID_PROPOSTA = NULL)
- {
- parent::__construct($ID_PROPOSTA);
- parent::addAttribute('CORRETOR');//FK FORNECEDOR
- parent::addAttribute('FUNCIONARIO');
- parent::addAttribute('DESCRICAO');
- parent::addAttribute('FOTO');
- parent::addAttribute('NOME');
- parent::addAttribute('CPF');
- parent::addAttribute('STATUS');
- parent::addAttribute('USER_ID');
- parent::addAttribute('USER_NAME');
- }//function __construct
- public function load($ID_PROPOSTA)
- {
- $this->proposta_foto = parent::loadComposite('proposta_foto', 'PROPOSTA_ID', $ID_PROPOSTA);
- return parent::load($ID_PROPOSTA);
- }//load
- public function store()
- {
- parent::store();
- //composição entre proposta e proposta_foto
- //tabela relacional , FK , id do obj , vetor
- parent::saveComposite('proposta_foto', 'PROPOSTA_ID', $this->ID_PROPOSTA, $this->proposta_foto);
- }//function store
- public function delete($ID_PROPOSTA = NULL)
- {
- $ID_PROPOSTA = isset($ID_PROPOSTA) ? $ID_PROPOSTA: $this->ID_PROPOSTA;
- parent::deleteComposite('proposta_foto', 'PROPOSTA_ID', $ID_PROPOSTA);
- parent::delete( $ID_PROPOSTA );
- }//function delete
- /*
- Add os 'proposta_foto's no array @$this->proposta_foto
- */
- public function addproposta_foto(proposta_foto $object)
- {
- $this->proposta_foto[] = $object;
- }//addproposta_foto
- /*
- retorna os 'proposta_foto' em forma de array
- */
- public function getproposta_foto()
- {
- return $this->proposta_foto;
- }//getproposta_foto
- /*
- retorna o nome do corretor
- */
- public function get_nome_corretor()
- {
- if(empty($this->nome_corretor))
- {
- $this->nome_corretor = new fornecedor($this->CORRETOR);//FK
- }
- return $this->nome_corretor;
- }//get_nome_corretor
- }//TRecord
- ?>
- <?php
- class proposta_foto Extends TRecord
- {
- const TABLENAME = 'PROPOSTA_FOTO';
- const PRIMARYKEY = 'ID_PROPOSTA_FOTO';
- const IDPOLICY = 'max';
- public function __construct($ID_PROPOSTA_FOTO = NULL)
- {
- parent::__construct($ID_PROPOSTA_FOTO);
- parent::addAttribute('PROPOSTA_ID');//FK PROPOSTA
- parent::addAttribute('FOTO');
- parent::addAttribute('DESCRICAO');
- }//function __construct
- }//TRecord
- ?>
Você está usando master/detail? A função saveFile não está preparada para esse tipo de formulário. Você vai ter que adaptar
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 ?
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.
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.
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 ?
Já achei, vou tentar adaptar...depois eu falo se deu certo ou não. Valeu Nataniel.