TN
Referência ao objeto através do $this dentro de uma função
Boa tarde pessoal!
Gostaria de mais um help! Estou trabalhando com o modal input dialog que possui um form com 3 elementos. Ocorre que quando clicar no botão salvar, chama uma função que possui a ação de pegar os valores do input do form e enviar para o BD. O problema é que na função salvar eu tento validar os campos ou pegar os dados (->getDate()) através da chamada $this. No entanto recebo uma mensagem de erro que "Using $this when not in object context".
Função que chama o Input Dialog ao clicar em outro botão de outra tela
public static function onInputDialog( $param )
{
TScript::create("$('.close').hide();");
$form = new BootstrapFormBuilder('input_form');
$nome = new TEntry('nome');
$ativo = new TRadioGroup ('ativo');;
$convenio_id = new THidden('convenio_id');
// define some properties for the form fields
$nome->setSize('100%');
$convenio_id->setValue($param['convenio_id']);
//configurações do checked ativo
$ativo->setUseButton();
$ativo->addItems( [ '1' => 'Sim', '0' => 'Não' ] );
$ativo->setLayout('horizontal');
$ativo->setValue('1');
$ativo->style = 'width: 20%;';
$ativo->class ='circle-nicelabel';
//
$form->addFields([new TLabel('Nome:')], [$nome] );
$form->addFields([new TLabel('Ativo:')], [$ativo],
[new TLabel('')], [$convenio_id] );
$nome->addValidation( 'Nome:', new TRequiredValidator);
$btn1 = $form->addAction('Salvar', new TAction([__CLASS__, 'onSavePlano']), 'far:save white');
$btn1->class = 'btn btn-salvar';
$btn2 = $form->addAction('Fechar', new TAction([__CLASS__, 'onClosePlano']), 'fa:times white');
$btn2->class = 'btn btn-fechar';
// show the input dialog
new TInputDialog('Novo Plano de Saúde', $form);
}
Função para salvar os dados do form do Input Dialog
public static function onSavePlano( $param )
{
try
{
TTransaction::open('lexushealt_BD'); // open a transaction
$this->form->validate(); // validate form data
$object = new Plano; // create an empty object
$data = $this->form->getData(); // get form data as array
$object->fromArray( (array) $data); // load the object with data
$object->convenio_id = $param['convenio_id'];
$object->nome = $param['nome'];
$object->ativo = $param['ativo'];
$object->store(); // save the object
// get the generated id
$data->id = $object->id;
$this->form->setData($data); // fill form data
TTransaction::close(); // close the transaction
new TMessage('info', 'Plano de saúde salvo com sucesso');
//new TMessage('info', 'Confirm1 : ' . str_replace(',', '
', json_encode($param)));
}
catch (Exception $e) // in case of exception
{
new TMessage('error', 'Error ' .$e->getCode(). '-' . $e->getMessage()); // shows the exception error message
TTransaction::rollback(); // undo all pending operations
}
//new TMessage('info', 'Confirm1 : ' . str_replace(',', '
', json_encode($param)));
}
Se alguém puder me ajudar de como substituit o $this pelo próprio nome do objetivo form do inputdialog eu agradeço!
Gostaria de mais um help! Estou trabalhando com o modal input dialog que possui um form com 3 elementos. Ocorre que quando clicar no botão salvar, chama uma função que possui a ação de pegar os valores do input do form e enviar para o BD. O problema é que na função salvar eu tento validar os campos ou pegar os dados (->getDate()) através da chamada $this. No entanto recebo uma mensagem de erro que "Using $this when not in object context".
Função que chama o Input Dialog ao clicar em outro botão de outra tela
public static function onInputDialog( $param )
{
TScript::create("$('.close').hide();");
$form = new BootstrapFormBuilder('input_form');
$nome = new TEntry('nome');
$ativo = new TRadioGroup ('ativo');;
$convenio_id = new THidden('convenio_id');
// define some properties for the form fields
$nome->setSize('100%');
$convenio_id->setValue($param['convenio_id']);
//configurações do checked ativo
$ativo->setUseButton();
$ativo->addItems( [ '1' => 'Sim', '0' => 'Não' ] );
$ativo->setLayout('horizontal');
$ativo->setValue('1');
$ativo->style = 'width: 20%;';
$ativo->class ='circle-nicelabel';
//
$form->addFields([new TLabel('Nome:')], [$nome] );
$form->addFields([new TLabel('Ativo:')], [$ativo],
[new TLabel('')], [$convenio_id] );
$nome->addValidation( 'Nome:', new TRequiredValidator);
$btn1 = $form->addAction('Salvar', new TAction([__CLASS__, 'onSavePlano']), 'far:save white');
$btn1->class = 'btn btn-salvar';
$btn2 = $form->addAction('Fechar', new TAction([__CLASS__, 'onClosePlano']), 'fa:times white');
$btn2->class = 'btn btn-fechar';
// show the input dialog
new TInputDialog('Novo Plano de Saúde', $form);
}
Função para salvar os dados do form do Input Dialog
public static function onSavePlano( $param )
{
try
{
TTransaction::open('lexushealt_BD'); // open a transaction
$this->form->validate(); // validate form data
$object = new Plano; // create an empty object
$data = $this->form->getData(); // get form data as array
$object->fromArray( (array) $data); // load the object with data
$object->convenio_id = $param['convenio_id'];
$object->nome = $param['nome'];
$object->ativo = $param['ativo'];
$object->store(); // save the object
// get the generated id
$data->id = $object->id;
$this->form->setData($data); // fill form data
TTransaction::close(); // close the transaction
new TMessage('info', 'Plano de saúde salvo com sucesso');
//new TMessage('info', 'Confirm1 : ' . str_replace(',', '
', json_encode($param)));
}
catch (Exception $e) // in case of exception
{
new TMessage('error', 'Error ' .$e->getCode(). '-' . $e->getMessage()); // shows the exception error message
TTransaction::rollback(); // undo all pending operations
}
//new TMessage('info', 'Confirm1 : ' . str_replace(',', '
', json_encode($param)));
}
Se alguém puder me ajudar de como substituit o $this pelo próprio nome do objetivo form do inputdialog eu agradeço!
Outra coisa neste código que não funciona muito bem no InputDialog é a validação dos campos do form, ele está permitindo o envio de informação mesmo com o campo vazio! Sei que alterando a função "static" para public a função funcionará com $this, mas isso afeta bastante um dalay e outro erro antes de atualizar a tema anterior que chamou a função. Dessa forma, a informação é enviada e a tela é atualizada, mas dá para perceber a ocorrencia de um erro neste intervalo
Como não é possível usar o "$this" em funções estáticas, você pode trabalhar com "$param", que é um array associativo contendo todos os dados do post.
Muito obrigado Nataniel Rabaioli! Deu hiper certo a sua sugestão! Ficou muito boa a troca de transição entre os dados inserido no input dialog e o retorno para a tela anterior!
thanks