PROBLEMAS AO MOVER ARQUIVO COM TFILE FORM MESTRE DETALHES Não estou conseguindo mover o arquivo (imagem) para a pasta especificada. Utilizo o Adianti studio PRO. ...
AR
PROBLEMAS AO MOVER ARQUIVO COM TFILE FORM MESTRE DETALHES  
Não estou conseguindo mover o arquivo (imagem) para a pasta especificada.
Utilizo o Adianti studio PRO.

<?php/** * AirlineForm Master/Detail * @author */class AirlineForm extends TPage{    protected $form; // form    protected $fieldlist;              // trait with saveFile, saveFiles, ...    use Adianti\Base\AdiantiFileSaveTrait;        /**     * Class constructor     * Creates the page and the registration form     */    function __construct($param)    {        parent::__construct($param);                // creates the form        $this->form = new TForm('form_Airline');        $panel_master = new TPanelGroup('Airline');        $vbox = new TVBox;        $vbox->style = 'width: 100%';        $this->form->add($panel_master);        $panel_master->add($vbox);                $table_general = new TTable;        $table_general->width = '100%';                $frame_general = new TFrame;        $frame_general->class = 'tframe tframe-custom';        $frame_general->setLegend(_t('Airline'));        $frame_general->style = 'background:whiteSmoke';        $frame_general->add($table_general);                $frame_details = new TFrame;        $frame_details->class = 'tframe tframe-custom';        $frame_details->setLegend(_t('Flights'));                $vbox->add( $frame_general );        $vbox->add( $frame_details );                // master fields        $id = new TEntry('id');        $a2 = new TEntry('a2');        $a3 = new TEntry('a3');        $name = new TEntry('name');        $photo_path = new TFile('photo_path');        // sizes        $id->setSize('100%');        $a2->setSize('100%');        $a3->setSize('100%');        $name->setSize('100%');        $photo_path->setSize('100%');        if (!empty($id))        {            $id->setEditable(FALSE);        }                // add form fields to be handled by form        $this->form->addField($id);        $this->form->addField($a2);        $this->form->addField($a3);        $this->form->addField($name);        $this->form->addField($photo_path);                // add form fields to the screen        $table_general->addRowSet( new TLabel('Id'), $id );        $table_general->addRowSet( new TLabel('A2'), $a2 );        $table_general->addRowSet( new TLabel('A3'), $a3 );        $table_general->addRowSet( new TLabel('Name'), $name );        $table_general->addRowSet( new TLabel('Photo Path'), $photo_path );                                // detail fields        $this->fieldlist = new TFieldList;        $this->fieldlist->enableSorting();        $frame_details->add($this->fieldlist);                $number = new TEntry('list_number[]');        $origem_id = new TDBCombo('list_origem_id[]', 'atendimento', 'Aerodrome', 'id', 'iata');        $destino_id = new TDBCombo('list_destino_id[]', 'atendimento', 'Aerodrome', 'id', 'iata');        $number->setSize('100%');        $origem_id->setSize('100%');        $destino_id->setSize('100%');        $this->fieldlist->addField( '<b>Number</b>', $number, ['width' => '20%']);        $this->fieldlist->addField( '<b>Origem</b>', $origem_id, ['width' => '20%']);        $this->fieldlist->addField( '<b>Destino</b>', $destino_id, ['width' => '20%']);        $this->form->addField($number);        $this->form->addField($origem_id);        $this->form->addField($destino_id);                // create an action button (save)        $save_button = TButton::create('save', [$this, 'onSave'],  _t('Save'), 'fa:save blue');        $new_button  = TButton::create('new',  [$this, 'onClear'], _t('Clear'),  'fa:eraser red');                $this->form->addField($save_button);        $this->form->addField($new_button);                $panel_master->addFooter( THBox::pack($save_button, $new_button) );                // create the page container        $container = new TVBox;        $container->style = 'width: 100%';        //$container->add(new TXMLBreadCrumb('menu.xml', __CLASS__));        $container->add($this->form);        parent::add($container);    }        /**     * Executed whenever the user clicks at the edit button da datagrid     */    function onEdit($param)    {        try        {            TTransaction::open('atendimento');                        if (isset($param['key']))            {                $key = $param['key'];                                $object = new Airline($key);                $this->form->setData($object);                                $items  = Flight::where('airline_id', '=', $key)->load();                                $this->fieldlist->addHeader();                if ($items)                {                    foreach($items  as $item )                    {                        $detail = new stdClass;                        $detail->list_number = $item->number;                        $detail->list_origem_id = $item->origem_id;                        $detail->list_destino_id = $item->destino_id;                        $this->fieldlist->addDetail($detail);                    }                                        $this->fieldlist->addCloneAction();                }                else                {                    $this->onClear($param);                }                                TTransaction::close(); // close transaction            }        }        catch (Exception $e) // in case of exception        {            new TMessage('error', $e->getMessage());            TTransaction::rollback();        }    }        /**     * Clear form     */    public function onClear($param)    {        $this->fieldlist->addHeader();        $this->fieldlist->addDetail( new stdClass );        $this->fieldlist->addCloneAction();    }        /**     * Save the Airline and the Flight's     */    public static function onSave($param)    {        try        {            TTransaction::open('atendimento');                        $id = (int) $param['id'];            $master = new Airline;            $master->fromArray( $param);            $master->store(); // save master object                        // copy file to target folder            $this->saveFile($master, $param, 'photo_path', 'files/images');                        // delete details            Flight::where('airline_id', '=', $master->id)->delete();                        if( !empty($param['list_number']) AND is_array($param['list_number']) )            {                foreach( $param['list_number'] as $row => $number)                {                    if (!empty($number))                    {                        $detail = new Flight;                        $detail->airline_id = $master->id;                        $detail->number = $param['list_number'][$row];                        $detail->origem_id = $param['list_origem_id'][$row];                        $detail->destino_id = $param['list_destino_id'][$row];                        $detail->store();                    }                }            }                        $data = new stdClass;            $data->id = $master->id;            TForm::sendData('form_Airline', $data);            TTransaction::close(); // close the transaction                        new TMessage('info', TAdiantiCoreTranslator::translate('Record saved'));        }        catch (Exception $e) // in case of exception        {            new TMessage('error', $e->getMessage());            TTransaction::rollback();        }    }}?>

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


FC

Qual a versão do framework?
Tenta assim
$this->saveFile($master, $master, 'photo_path', 'files/images');

Senão der certo pode fazer a mão mesmo com rename sem o trait

AR

Estou com a versão 5.6.0 do Framework.
Não deu certo deste jeito!
FC

Altera lá em cima, senão der certo vamos fazer a mão sem o trait
$photo_path = new TFile('photo_path');
$photo_path->enableFileHandling();
AR

Apareceu este erro ao salvar:
SQLSTATE[22001]: String data, right truncated: 1406 Data too long for column 'photo_path' at row 1
AR

Apareceu este erro ao salvar:
SQLSTATE[22001]: String data, right truncated: 1406 Data too long for column 'photo_path' at row 1
FC

está dando erro no campo do banco de dados muda ele de char para text somente para testarmos.
AR

Já mudei e agora voltou o erro anterior na linha 189.
FC

então o saveFile espera como parametro o $data do form que é um array diferente do $param se quiser depois se aprofundar e estudar esses componentes é legal porém apenas para resolver de imediato retire a linha
$photo_path->enableFileHandling();
e onde está a linha
$this->saveFile($master, $master, 'photo_path', 'files/images');
altere para:
$source_file = 'tmp/'.$master->photo_path;
if(file_exists($source_file)){
$target_file = 'files/images/'.$master->photo_path;
rename($source_file, $target_file);
}

AR

Deu certo desta forma.

Muito obrigado pela ajuda!

Vou dar uma estudada neste componente.

Um grande abraço!