HB
Validação em tempo real de execução com TRequiredValidator()
Olá pessoal.
Seguindo os meus testes buscando mais conhecimento, como já postei anteriormente uma dúvida (pode ser útil a alguém e quem puder me ajude - www.adianti.com.br/forum/pt/view_3918?problema-com-onchangeradio-no-),
também quero fazer validações aproveitando TRequiredValidator(), só que em tempo de execução, ou seja, ao teclar TAB pelo campo, gostaria de ativar TRequiredValidator() no exato momento da passagem pelo campo.
Já vi no tutor e também no livro que existe o método onExitAction, mais confesso que ainda tenho dificuldade em entender esse método e conseguir implementar o TRequiredValidator().
Gostaria de saber se é possível implementar o TRequiredValidator() em tempo de execução, pois, até agora só vi funcionar com o onSave no momento de salvar os dados do formulário.
No meu exemplo abaixo, eu gostaria que ao teclar TAB no campo $campo1 = new TEntry('campo1'), caso não seja preenchido, a aplicação devolve a mensagem de obrigatoriedade do preenchimento.
Podem me ajudar a implementar essa validação?
Código Completo
Obrigado,
José Humberto Júnior
Seguindo os meus testes buscando mais conhecimento, como já postei anteriormente uma dúvida (pode ser útil a alguém e quem puder me ajude - www.adianti.com.br/forum/pt/view_3918?problema-com-onchangeradio-no-),
também quero fazer validações aproveitando TRequiredValidator(), só que em tempo de execução, ou seja, ao teclar TAB pelo campo, gostaria de ativar TRequiredValidator() no exato momento da passagem pelo campo.
Já vi no tutor e também no livro que existe o método onExitAction, mais confesso que ainda tenho dificuldade em entender esse método e conseguir implementar o TRequiredValidator().
Gostaria de saber se é possível implementar o TRequiredValidator() em tempo de execução, pois, até agora só vi funcionar com o onSave no momento de salvar os dados do formulário.
No meu exemplo abaixo, eu gostaria que ao teclar TAB no campo $campo1 = new TEntry('campo1'), caso não seja preenchido, a aplicação devolve a mensagem de obrigatoriedade do preenchimento.
Podem me ajudar a implementar essa validação?
Código Completo
- <?php
- /**
- * TestedoisForm Form
- * @author <your name here>
- */
- class TestedoisForm extends TPage
- {
- protected $form; // form
- /**
- * Form constructor
- * @param $param Request
- */
- public function __construct( $param )
- {
- parent::__construct();
- // creates the form
- $this->form = new TQuickForm('form_Testedois');
- $this->form->class = 'tform'; // change CSS class
- $this->form = new BootstrapFormWrapper($this->form);
- $this->form->style = 'display: table;width:100%'; // change style
- // define the form title
- $this->form->setFormTitle('Testedois');
- // create the form fields
- $id = new TEntry('id');
- $campo1 = new TEntry('campo1');
- $campo2 = new TEntry('campo2');
- $campo3 = new TEntry('campo3');
- $campo4 = new TEntry('campo4');
- //$testeum_id = new TEntry('testeum_id');
- $radio_enable = new TRadioGroup('testeum_id');
- $radio_enable->addItems(array('1'=>'Grupo 1', '2'=>'Grupo 2'));
- $radio_enable->setLayout('horizontal');
- $radio_enable->setValue(1);
- // add the fields
- $this->form->addQuickField('Id', $id, '10%' );
- $this->form->addQuickField('', $radio_enable, 80);
- $this->form->addQuickField('Grupo 1', $campo1, '40%' );
- $this->form->addQuickField('', $campo2, '40%' );
- $this->form->addQuickField('Grupo 2', $campo3, '40%' );
- $this->form->addQuickField('', $campo4, '40%' );
- //$this->form->addQuickField('Testeum Id', $testeum_id, '50%' );
- $radio_enable->setChangeAction( new TAction( array($this, 'onChangeRadio')) );
- self::onChangeRadio( array('testeum_id'=>1) );
- if (!empty($id))
- {
- $id->setEditable(FALSE);
- }
- /** samples
- $this->form->addQuickFields('Date', array($date1, new TLabel('to'), $date2)); // side by side fields
- $fieldX->addValidation( 'Field X', new TRequiredValidator ); // add validation
- $fieldX->setSize( 100, 40 ); // set size
- **/
- // create the form actions
- $btn = $this->form->addQuickAction(_t('Save'), new TAction(array($this, 'onSave')), 'fa:floppy-o');
- $btn->class = 'btn btn-sm btn-primary';
- $this->form->addQuickAction(_t('New'), new TAction(array($this, 'onClear')), 'bs:plus-sign green');
- // vertical box container
- $container = new TVBox;
- $container->style = 'width: 90%';
- // $container->add(new TXMLBreadCrumb('menu.xml', __CLASS__));
- $container->add(TPanelGroup::pack('Teste Habilita / Desabilita Campos', $this->form));
- parent::add($container);
- }
- /**
- * Save form data
- * @param $param Request
- */
- public function onSave( $param )
- {
- try
- {
- TTransaction::open('teste'); // open a transaction
- /**
- // Enable Debug logger for SQL operations inside the transaction
- TTransaction::setLogger(new TLoggerSTD); // standard output
- TTransaction::setLogger(new TLoggerTXT('log.txt')); // file
- **/
- $this->form->validate(); // validate form data
- $object = new Testedois; // create an empty object
- $data = $this->form->getData(); // get form data as array
- $object->fromArray( (array) $data); // load the object with data
- $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', TAdiantiCoreTranslator::translate('Record saved'));
- }
- catch (Exception $e) // in case of exception
- {
- new TMessage('error', $e->getMessage()); // shows the exception error message
- $this->form->setData( $this->form->getData() ); // keep form data
- TTransaction::rollback(); // undo all pending operations
- }
- }
- /**
- * Clear form data
- * @param $param Request
- */
- public function onClear( $param )
- {
- $this->form->clear(TRUE);
- }
- /**
- * Load object to form data
- * @param $param Request
- */
- public function onEdit( $param )
- {
- try
- {
- if (isset($param['key']))
- {
- $key = $param['key']; // get the parameter $key
- TTransaction::open('teste'); // open a transaction
- $object = new Testedois($key); // instantiates the Active Record
- $this->form->setData($object); // fill the form
- TTransaction::close(); // close the transaction
- }
- else
- {
- $this->form->clear(TRUE);
- }
- }
- catch (Exception $e) // in case of exception
- {
- new TMessage('error', $e->getMessage()); // shows the exception error message
- TTransaction::rollback(); // undo all pending operations
- }
- }
- /**
- * on ChangeRadio change
- * @param $param Action parameters
- */
- public static function onChangeRadio($param)
- {
- if ($param['testeum_id'] == 1)
- {
- TEntry::enableField('form_Testedois', 'campo1');
- TEntry::enableField('form_Testedois', 'campo2');
- TEntry::disableField('form_Testedois', 'campo3');
- TEntry::disableField('form_Testedois', 'campo4');
- TEntry::clearField('form_Testedois', 'campo3');
- TEntry::clearField('form_Testedois', 'campo4');
- }
- else
- {
- TEntry::disableField('form_Testedois', 'campo1');
- TEntry::disableField('form_Testedois', 'campo2');
- TEntry::enableField('form_Testedois', 'campo3');
- TEntry::enableField('form_Testedois', 'campo4');
- TEntry::clearField('form_Testedois', 'campo1');
- TEntry::clearField('form_Testedois', 'campo2');
- }
- }
- }
- ?>
Obrigado,
José Humberto Júnior
Aí pessoal, alguém pode dar uma força aqui?
:)
Veja se o link abaixo ajuda:
adianti.com.br/forum/pt/view_661?adicionando-validacoes-em-formulari