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 - http://www.adianti.com.br/forum/pt/view_3918?problema-com-onchangeradio-no-classe-habilita-desabilita-campo), também quero fazer validações aproveitando TRequiredValidator(), só que em tempo de execução, ou seja, ao teclar T...
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
 
  1. <?php
  2. /**
  3. * TestedoisForm Form
  4. * @author <your name here>
  5. */
  6. class TestedoisForm extends TPage
  7. {
  8. protected $form; // form
  9. /**
  10. * Form constructor
  11. * @param $param Request
  12. */
  13. public function __construct( $param )
  14. {
  15. parent::__construct();
  16. // creates the form
  17. $this->form = new TQuickForm('form_Testedois');
  18. $this->form->class = 'tform'; // change CSS class
  19. $this->form = new BootstrapFormWrapper($this->form);
  20. $this->form->style = 'display: table;width:100%'; // change style
  21. // define the form title
  22. $this->form->setFormTitle('Testedois');
  23. // create the form fields
  24. $id = new TEntry('id');
  25. $campo1 = new TEntry('campo1');
  26. $campo2 = new TEntry('campo2');
  27. $campo3 = new TEntry('campo3');
  28. $campo4 = new TEntry('campo4');
  29. //$testeum_id = new TEntry('testeum_id');
  30. $radio_enable = new TRadioGroup('testeum_id');
  31. $radio_enable->addItems(array('1'=>'Grupo 1', '2'=>'Grupo 2'));
  32. $radio_enable->setLayout('horizontal');
  33. $radio_enable->setValue(1);
  34. // add the fields
  35. $this->form->addQuickField('Id', $id, '10%' );
  36. $this->form->addQuickField('', $radio_enable, 80);
  37. $this->form->addQuickField('Grupo 1', $campo1, '40%' );
  38. $this->form->addQuickField('', $campo2, '40%' );
  39. $this->form->addQuickField('Grupo 2', $campo3, '40%' );
  40. $this->form->addQuickField('', $campo4, '40%' );
  41. //$this->form->addQuickField('Testeum Id', $testeum_id, '50%' );
  42. $radio_enable->setChangeAction( new TAction( array($this, 'onChangeRadio')) );
  43. self::onChangeRadio( array('testeum_id'=>1) );
  44. if (!empty($id))
  45. {
  46. $id->setEditable(FALSE);
  47. }
  48. /** samples
  49. $this->form->addQuickFields('Date', array($date1, new TLabel('to'), $date2)); // side by side fields
  50. $fieldX->addValidation( 'Field X', new TRequiredValidator ); // add validation
  51. $fieldX->setSize( 100, 40 ); // set size
  52. **/
  53. // create the form actions
  54. $btn = $this->form->addQuickAction(_t('Save'), new TAction(array($this, 'onSave')), 'fa:floppy-o');
  55. $btn->class = 'btn btn-sm btn-primary';
  56. $this->form->addQuickAction(_t('New'), new TAction(array($this, 'onClear')), 'bs:plus-sign green');
  57. // vertical box container
  58. $container = new TVBox;
  59. $container->style = 'width: 90%';
  60. // $container->add(new TXMLBreadCrumb('menu.xml', __CLASS__));
  61. $container->add(TPanelGroup::pack('Teste Habilita / Desabilita Campos', $this->form));
  62. parent::add($container);
  63. }
  64. /**
  65. * Save form data
  66. * @param $param Request
  67. */
  68. public function onSave( $param )
  69. {
  70. try
  71. {
  72. TTransaction::open('teste'); // open a transaction
  73. /**
  74. // Enable Debug logger for SQL operations inside the transaction
  75. TTransaction::setLogger(new TLoggerSTD); // standard output
  76. TTransaction::setLogger(new TLoggerTXT('log.txt')); // file
  77. **/
  78. $this->form->validate(); // validate form data
  79. $object = new Testedois; // create an empty object
  80. $data = $this->form->getData(); // get form data as array
  81. $object->fromArray( (array) $data); // load the object with data
  82. $object->store(); // save the object
  83. // get the generated id
  84. $data->id = $object->id;
  85. $this->form->setData($data); // fill form data
  86. TTransaction::close(); // close the transaction
  87. new TMessage('info', TAdiantiCoreTranslator::translate('Record saved'));
  88. }
  89. catch (Exception $e) // in case of exception
  90. {
  91. new TMessage('error', $e->getMessage()); // shows the exception error message
  92. $this->form->setData( $this->form->getData() ); // keep form data
  93. TTransaction::rollback(); // undo all pending operations
  94. }
  95. }
  96. /**
  97. * Clear form data
  98. * @param $param Request
  99. */
  100. public function onClear( $param )
  101. {
  102. $this->form->clear(TRUE);
  103. }
  104. /**
  105. * Load object to form data
  106. * @param $param Request
  107. */
  108. public function onEdit( $param )
  109. {
  110. try
  111. {
  112. if (isset($param['key']))
  113. {
  114. $key = $param['key']; // get the parameter $key
  115. TTransaction::open('teste'); // open a transaction
  116. $object = new Testedois($key); // instantiates the Active Record
  117. $this->form->setData($object); // fill the form
  118. TTransaction::close(); // close the transaction
  119. }
  120. else
  121. {
  122. $this->form->clear(TRUE);
  123. }
  124. }
  125. catch (Exception $e) // in case of exception
  126. {
  127. new TMessage('error', $e->getMessage()); // shows the exception error message
  128. TTransaction::rollback(); // undo all pending operations
  129. }
  130. }
  131. /**
  132. * on ChangeRadio change
  133. * @param $param Action parameters
  134. */
  135. public static function onChangeRadio($param)
  136. {
  137. if ($param['testeum_id'] == 1)
  138. {
  139. TEntry::enableField('form_Testedois', 'campo1');
  140. TEntry::enableField('form_Testedois', 'campo2');
  141. TEntry::disableField('form_Testedois', 'campo3');
  142. TEntry::disableField('form_Testedois', 'campo4');
  143. TEntry::clearField('form_Testedois', 'campo3');
  144. TEntry::clearField('form_Testedois', 'campo4');
  145. }
  146. else
  147. {
  148. TEntry::disableField('form_Testedois', 'campo1');
  149. TEntry::disableField('form_Testedois', 'campo2');
  150. TEntry::enableField('form_Testedois', 'campo3');
  151. TEntry::enableField('form_Testedois', 'campo4');
  152. TEntry::clearField('form_Testedois', 'campo1');
  153. TEntry::clearField('form_Testedois', 'campo2');
  154. }
  155. }
  156. }
  157. ?>


Obrigado,
José Humberto Júnior

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


HB

Aí pessoal, alguém pode dar uma força aqui?
:)
NR

Veja se o link abaixo ajuda:
adianti.com.br/forum/pt/view_661?adicionando-validacoes-em-formulari