Conheça  A Ferramenta LowCode mais moderna e veloz para desenvolvimento PHP: Adianti Creator
Problema ao capturar dados do formulário. Estou tentando salvar os dados de um formulário de uma tela onde eu tenho um BootstrapFormBuilder como $this->form e um TForm como $this->formgrid ou seja dois forms na mesma tela , o meu problema é que só consigo capturar os dados que estão dentro do $this->formgrid o TForm os dados do $this->form não são capturados. Alguém sabe como fazer isso ou se não vou conseguir pq tem dois form's n...
JF
Problema ao capturar dados do formulário.  
Estou tentando salvar os dados de um formulário de uma tela onde eu tenho um BootstrapFormBuilder como $this->form e um TForm como $this->formgrid ou seja dois forms na mesma tela , o meu problema é que só consigo capturar os dados que estão dentro do $this->formgrid o TForm os dados do $this->form não são capturados. Alguém sabe como fazer isso ou se não vou conseguir pq tem dois form's na mesma tela, alguma dica ou ajuda ?
Essa tela e continuação de um post que já foi ajudado por aqui...https://www.adianti.com.br/forum/pt/view_5143#_=_
Fico no aguardo. Obrigado

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


JF

 
  1. <?php
  2. class FormUserSistem Extends TPage
  3. {
  4. protected $form;
  5. protected $datagrid;
  6. protected $pageNavigation;
  7. protected $formgrid;
  8. protected $saveButton;
  9. // trait with onReload, onSearch, onDelete...
  10. use Adianti\Base\AdiantiStandardListTrait;
  11. public function __construct()
  12. {
  13. parent::__construct();
  14. //cria o form
  15. $this->form = new BootstrapFormBuilder('form_System_user');
  16. $this->form->class='tform';
  17. $this->form->setFieldSizes('100%');
  18. //cria os atributos
  19. $id = new TEntry('id_user');
  20. $name = new TEntry('name');
  21. $login = new TEntry('login');
  22. $email = new TEntry('email');
  23. //cria os botões
  24. $this->saveButton = new TButton('update_collection');
  25. $this->saveButton->setAction(new TAction(array($this, 'onSave')), 'Save');
  26. $this->saveButton->setImage('fa:save green');
  27. $btn_voltar = TButton::create('btn_voltar' ,array('SystemUserList', 'onReload'), 'Voltar', 'fa: fa-arrow-left' );
  28. $btn_pesquisar = TButton::create('btn_pesquisar', array($this, 'onSearch'), 'Buscar', 'fa:search blue');
  29. $btn_permissao = TButton::create('btn_permissao', array($this, 'onAddPermissao2'), 'Adicionar', 'fa:plus blue');
  30. $btn_teste = TButton::create('btn_teste', array($this, 'onView2'), 'Teste', 'fa:plus blue');//onTeste
  31. //formatações
  32. $busca->placeHolder = 'Pesquisar...';
  33. //cria a grid
  34. $this->datagrid = new BootstrapDatagridWrapper(new TQuickGrid);
  35. //$this->datagrid = new TQuickGrid;
  36. $this->datagrid->style = 'width: 100%';
  37. // make scrollable and define height
  38. $this->datagrid->setHeight(200);
  39. $this->datagrid->makeScrollable();
  40. $this->datagrid->DisableDefaultClick;
  41. // create the datagrid columns
  42. $col_delete = new TDataGridColumn('delete', '', 'center', '10%');
  43. $col_id = new TDataGridColumn('system_program_id', 'ID', 'left', '10%');
  44. $col_id_programa = new TDataGridColumn('programa_nome', 'Programa', 'left', '50%');
  45. $col_acesso = new TDataGridColumn('acesso', 'Acesso', 'left', '10%');
  46. $col_insercao = new TDataGridColumn('insercao', 'Inserção', 'left', '10%');
  47. $col_delecao = new TDataGridColumn('delecao', 'Deleção', 'left', '10%');
  48. // add the columns to the datagrid
  49. $this->datagrid->addColumn($col_id);
  50. //$this->datagrid->addColumn($edit);
  51. $this->datagrid->addColumn($col_delete);
  52. $this->datagrid->addColumn($col_id_programa);
  53. $this->datagrid->addColumn($col_acesso);
  54. $this->datagrid->addColumn($col_insercao);
  55. $this->datagrid->addColumn($col_delecao);
  56. $this->datagrid->createModel();
  57. //add os campos no form
  58. // define the sizes
  59. $id->setSize('50%');
  60. $name->setSize('100%');
  61. $login->setSize('100%');
  62. $email->setSize('100%');
  63. $id->setEditable(false);
  64. // validations
  65. $name->addValidation(_t('Name'), new TRequiredValidator);
  66. $login->addValidation('Login', new TRequiredValidator);
  67. $email->addValidation('Email', new TEmailValidator);
  68. $this->form->addFields( [new TLabel('ID')], [$id], [new TLabel(_t('Name'))], [$name] );
  69. $this->form->addFields( [new TLabel(_t('Login'))], [$login], [new TLabel(_t('Email'))], [$email] );
  70. //barra menu coberturas
  71. $row = $this->form->addFields([$btn_permissao] );
  72. $row->layout = ['col-sm-1', 'col-sm-1', 'col-sm-1'];
  73. $row->style = 'background:whiteSmoke; border:1px solid #cccccc; margin:0 0 0 0; padding: 2px;';
  74. //pageNavigation
  75. $this->pageNavigation = new TPageNavigation();
  76. $this->pageNavigation->enableCounters();
  77. $this->pageNavigation->setAction(new TAction(array($this, 'onReload')));
  78. $this->pageNavigation->setWidth($this->datagrid->getWidth());
  79. //cria o painel
  80. $painel = new TPanelGroup('Permissões do usuário');
  81. $this->formgrid = new TForm;
  82. $this->formgrid->add($this->datagrid);
  83. //$this->formgrid->add($this->form);
  84. // define the datagrid transformer method
  85. $this->setTransformer(array($this, 'onBeforeLoad'));
  86. $painel->add($this->form);
  87. $painel->add($this->formgrid);//
  88. //$painel->add($this->datagrid);//
  89. //$painel->add($this->pageNavigation);
  90. //barra footer
  91. $painel->addFooter(THBox::pack($btn_voltar, $this->saveButton, $btn_teste));//btn_fechar
  92. //ativar a rolagem horizontal dentro do corpo do painel
  93. $painel->getBody()->style = "overflow-x:auto" ;
  94. //add os compos no form
  95. $this->formFields = array( $btn_voltar, $id, $name, $login, $email, $btn_teste, $this->saveButton);
  96. $this->form->setFields($this->formFields);
  97. $this->formgrid->setFields($this->formFields);
  98. //add o painel em tela
  99. //$menuBread = new TXMLBreadCrumb('menu.xml', 'systemExcecoesListe' );
  100. $vbox = new TVBox;
  101. $vbox->style = 'width:90%';
  102. //$vbox->add($menuBread);
  103. $vbox->add($painel);
  104. parent::add($vbox);
  105. }//__construct
  106. public function onSave($param)
  107. {
  108. $data_form = $this->formgrid->getData();
  109. $this->formgrid->setData($data_form); // keep the form filled
  110. try
  111. {
  112. // open transaction
  113. TTransaction::open('permission');
  114. // iterate datagrid form objects
  115. foreach ($this->formgrid->getFields() as $name => $field)
  116. {
  117. /**CAPTURA DADOS DAS PERMISSÕES**/
  118. if ($field instanceof TCheckButton)
  119. {
  120. $parts = explode('_', $name);
  121. $id = end($parts);
  122. $nome_campo = $parts[0];
  123. if ($nome_campo == 'acesso')
  124. {
  125. $object2 = SystemUserGroupProgram::find($id);
  126. if ($object2)
  127. {
  128. $object2->acesso = $field->getValue();
  129. $object2->insercao = $data_form->{"insercao_$id"};
  130. $object2->delecao = $data_form->{"delecao_$id"};
  131. if($object2->acesso == '')
  132. {
  133. $object2->acesso = 0;
  134. }
  135. if($object2->insercao == '')
  136. {
  137. $object2->insercao = 0;
  138. }
  139. if($object2->delecao == '')
  140. {
  141. $object2->delecao = 0;
  142. }
  143. //**SALVA AS PERMISSÕES
  144. $object2->store();//object
  145. }
  146. }
  147. }
  148. }//foreach
  149. //salva os dados do usuário
  150. $data = $this->form->getData();
  151. $this->form->setData($data);
  152. $object = new SystemUser;
  153. $object->fromArray( (array) $data );
  154. $object->id = $data->id ;
  155. $object->name = $data->name ;
  156. $object->login = $data->login ;
  157. $object->email = $data->email ;
  158. $object->store();
  159. new TMessage('info', AdiantiCoreTranslator::translate('Record updated'));
  160. // close transaction
  161. TTransaction::close();
  162. //manda os dados para o form
  163. TForm::sendData('form_System_user', $data_form);
  164. }
  165. catch (Exception $e)
  166. {
  167. // show the exception message
  168. new TMessage('error', $e->getMessage());
  169. TTransaction::rollback();
  170. }
  171. }//onSave
  172. ?>
NR

Por padrão um botão só fica vinculado a um formulário e com isso faz o post somente dos campos desse único formulário.
Tem algumas saídas para isso, você pode criar um hidden em um formulário com os dados do outro ou até customizar o click no botão para capturar os dados dos 2 formulários. O link abaixo tem exemplos de como alterar o comportamento do botão(função "addFunction"):
adianti.com.br/framework_files/tutor/index.php?class=FormButtonStyle
JF

Acabei deixando tudo no mesmo Form ai tudo funcionou...valeu abraços