Problemas com THidden Boa tarde pessoal, Possuo um campo THidden no formulario, mas o mesmo está mostrando o valor dele no formulário. Este valor não deveria estar oculto? Figura em anexo. $grupo_id = new THidden('id_grupo'); $grupo_id = TSession::getValue('idgrupo'); $this->form->addFields([$grupo_id]); Qual o problema amigos?...
AM
Problemas com THidden  
Boa tarde pessoal,

Possuo um campo THidden no formulario, mas o mesmo está mostrando o valor dele no formulário.

Este valor não deveria estar oculto?

Figura em anexo.

$grupo_id = new THidden('id_grupo'); $grupo_id = TSession::getValue('idgrupo'); $this->form->addFields([$grupo_id]);


Qual o problema amigos?

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


NR

Você está atribuindo o valor da sessão à mesma variável que continha o THidden. Acredito que você queira usar a função setValue:
 
  1. <?php
  2. //$grupo_id = TSession::getValue('idgrupo');
  3. $grupo_id->setValue(TSession::getValue('idgrupo'));
  4. ?>
AM

Vlew Nataniel, obrigado pela ajuda!
AM

Nataniel,

Funcionou o campo THidden, ele não aparece no formulario.
Porém, da forma que vc passou ele não consegue atribuir o valor da variavel TSession::getValue('idgrupo') ao campo THidden, retorna um valor null.

Como posso resolver isso?
AM

Nataniel, veja o código do PedidoForm.

Na Action onSave não mudou nada, é somente gravar na tabela de pedidos no campo id_grupo o valor de $id_grupo do Form.
O campo id_grupo no banco de dados é um campo que não aceita valor NULL, e ele está dando erro após a mudança na gravação.


 
  1. <?php
  2. /**
  3. * PedidoForm Form
  4. * @author <your name here>
  5. */
  6. class PedidoForm extends TPage
  7. {
  8. protected $form; // form
  9. use adianti\base\AdiantiMasterDetailTrait;
  10. /**
  11. * Form constructor
  12. * @param $param Request
  13. */
  14. public function __construct( $param )
  15. {
  16. parent::__construct();
  17. $this->form = new BootstrapFormBuilder('list_Pedido');
  18. $this->form->setFormTitle('Manutenção do Pedido');
  19. TSession::setValue('editaitem',false);
  20. // define format function
  21. $format_value = function($value) {
  22. if (is_numeric($value)) {
  23. return 'R$ '.number_format($value, 2, ',', '.');
  24. }
  25. return $value;
  26. };
  27. $criteria = new TCriteria;
  28. $criteria->add(new TFilter('grupo_id', '=', TSession::getValue('idgrupo') ));
  29. // master fields
  30. $id = new TEntry('id');
  31. $estado_pedido_id = new TDBCombo('estado_pedido_id', 'pharmaped', 'EstadoPedido', 'id', 'nome','nome asc' );
  32. $id_grupo = new THidden('id_grupo');
  33. $cliente_id = new TDBCombo('cliente_id', 'pharmaped', 'Farmacias', 'id', 'nome', 'nome asc', $criteria );
  34. $dt_pedido = new TDate('dt_pedido');
  35. $obs = new TText('obs');
  36. // detail fields
  37. $item_pedido_produto_id = new TDBUniqueSearch('item_pedido_produto_id', 'pharmaped', 'Produto', 'id', 'nome','id asc', $criteria );
  38. $item_pedido_quantidade = new TNumeric('item_pedido_quantidade', '2', ',', '.' );
  39. $item_pedido_qtd_atendida = new TNumeric('item_pedido_qtd_atendida', '2', ',', '.' );
  40. $item_pedido_valor = new TNumeric('item_pedido_valor', '2', ',', '.' );
  41. $item_pedido_id = new THidden('item_pedido_id');
  42. $estado_pedido_id->addValidation('Estado Pedido', new TRequiredValidator());
  43. $cliente_id->addValidation('Cliente', new TRequiredValidator());
  44. $dt_pedido->addValidation('Data do Pedido', new TRequiredValidator());
  45. $id->setEditable(false);
  46. $id->setSize(100);
  47. $cliente_id->setSize('100%');
  48. $item_pedido_produto_id->setMinLength(2);
  49. $dt_pedido->setValue(date('d/m/Y h:i'));
  50. $dt_pedido->setDatabaseMask('yyyy-mm-dd');
  51. $dt_pedido->setMask('dd/mm/yyyy');
  52. $dt_pedido->setSize(190);
  53. $obs->setSize('90%', 68);
  54. $estado_pedido_id->setSize('75%');
  55. $item_pedido_valor->setSize('71%');
  56. $item_pedido_produto_id->setMask('{nome} - {apresentacao} - {codigo_barras}');
  57. $item_pedido_produto_id->setSize('70%');
  58. $item_pedido_quantidade->setSize('71%');
  59. $item_pedido_qtd_atendida->setSize('71%');
  60. // Define o grupo da Farmacia
  61. //$id_grupo = TSession::getValue('idgrupo');
  62. $id_grupo->setValue(TSession::getValue('idgrupo'));
  63. // master fields
  64. $this->form->addFields([new TLabel('Id:')],[$id],[new TLabel('Estado pedido:', '#ff0000')],[$estado_pedido_id]);
  65. $this->form->addFields([new TLabel('Cliente:', '#ff0000')],[$cliente_id],[new TLabel('Dt pedido:', '#ff0000')],[$dt_pedido]);
  66. $this->form->addFields([new TLabel('Obs:')],[$obs]);
  67. $this->form->addFields([$id_grupo]);
  68. // detail fields
  69. $this->form->addContent([new TFormSeparator('Itens', '#333333', '18', '#eeeeee')]);
  70. $this->form->addFields([new TLabel('Produto:', '#ff0000')],[$item_pedido_produto_id]);
  71. $this->form->addFields([new TLabel('Quantidade:')],[$item_pedido_quantidade]);
  72. $this->form->addFields([new TLabel('Quantidade Atendida:')],[$item_pedido_qtd_atendida]);
  73. $this->form->addFields([new TLabel('Valor:')],[$item_pedido_valor]);
  74. $this->form->addFields([$item_pedido_id]);
  75. // add button
  76. $add_item_pedido = new TButton('add_item_pedido');
  77. $add_item_pedido->setAction(new TAction(array($this, 'onAddItemPedido')), 'Adicionar');
  78. $add_item_pedido->setImage('fa:plus #51c249');
  79. $this->form->addFields([$add_item_pedido]);
  80. // detail datagrid
  81. $this->item_pedido_list = new BootstrapDatagridWrapper(new TQuickGrid);
  82. $this->item_pedido_list->style = 'width:100%';
  83. $this->item_pedido_list->class .= ' table-bordered';
  84. $this->item_pedido_list->disableDefaultClick();
  85. $this->item_pedido_list->addQuickColumn('', 'edit', 'left', 50);
  86. $this->item_pedido_list->addQuickColumn('', 'delete', 'left', 50);
  87. $col_produto_id = $this->item_pedido_list->addQuickColumn('Produto', 'item_pedido_produto_id', 'left');
  88. $col_quantidade = $this->item_pedido_list->addQuickColumn('Quantidade', 'item_pedido_quantidade', 'right');
  89. $col_quantidade = $this->item_pedido_list->addQuickColumn('Atendida', 'item_pedido_qtd_atendida', 'right');
  90. $col_valor = $this->item_pedido_list->addQuickColumn('Valor', 'item_pedido_valor', 'right');
  91. $col_total = $this->item_pedido_list->addQuickColumn('Total', '= {item_pedido_quantidade} * {item_pedido_valor}', 'right');
  92. $col_total->setTotalFunction( function($values) {
  93. return array_sum((array) $values);
  94. });
  95. $this->item_pedido_list->createModel();
  96. $col_valor->setTransformer($format_value);
  97. $col_total->setTransformer($format_value);
  98. $this->form->addContent([$this->item_pedido_list]);
  99. // create the form actions
  100. $this->form->addHeaderAction('Salvar', new TAction([$this, 'onSave']), 'fa:floppy-o')->addStyleClass('btn-primary');
  101. $this->form->addHeaderAction('Limpar formulário', new TAction([$this, 'onClear']), 'fa:eraser #dd5a43');
  102. $this->form->addHeaderAction('Voltar', new TAction(array('PedidoList', 'onReload')), 'fa:table blue' );
  103. // vertical box container
  104. $container = new TVBox;
  105. $container->style = 'width: 100%';
  106. $container->class = 'form-container';
  107. $container->add(new TXMLBreadCrumb('menu.xml', 'PedidoList'));
  108. $container->add($this->form);
  109. parent::add($container);
  110. }
  111. /**
  112. * Adiciona item ao pedido
  113. * @param $param Request
  114. */
  115. public function onAddItemPedido( $param )
  116. {
  117. try
  118. {
  119. TSession::setValue('editaitem',false);
  120. $data = $this->form->getData();
  121. if(!$data->item_pedido_produto_id)
  122. {
  123. throw new Exception(AdiantiCoreTranslator::translate('The field ^1 is required', 'Produto id'));
  124. }
  125. $item_pedido_items = TSession::getValue('item_pedido_items');
  126. $key = !empty($data->item_pedido_id) ? $data->item_pedido_id : uniqid();
  127. $fields = [];
  128. $fields['item_pedido_produto_id'] = $data->item_pedido_produto_id;
  129. $fields['item_pedido_quantidade'] = $data->item_pedido_quantidade;
  130. $fields['item_pedido_qtd_atendida'] = $data->item_pedido_qtd_atendida;
  131. $fields['item_pedido_valor'] = $data->item_pedido_valor;
  132. $item_pedido_items[ $key ] = $fields;
  133. TSession::setValue('item_pedido_items', $item_pedido_items);
  134. // limpa os campos do item do pedido
  135. $data->item_pedido_produto_id = '';
  136. $data->item_pedido_quantidade = '';
  137. $data->item_pedido_qtd_atendida = '';
  138. $data->item_pedido_valor = '';
  139. $data->item_pedido_id = '';
  140. $this->form->setData($data);
  141. $this->onReload( $param );
  142. }
  143. catch (Exception $e)
  144. {
  145. $this->form->setData( $this->form->getData());
  146. new TMessage('error', $e->getMessage());
  147. }
  148. }
  149. /**
  150. * Recarrega tudo
  151. * @param $param Request
  152. */
  153. public function onReload($params = null)
  154. {
  155. $this->loaded = TRUE;
  156. $this->onReloadPedidoItemPedido($params);
  157. }
  158. /**
  159. * Recarrega itens do pedido
  160. * @param $param Request
  161. */
  162. public function onReloadPedidoItemPedido( $param )
  163. {
  164. $items = TSession::getValue('item_pedido_items');
  165. $this->item_pedido_list->clear();
  166. if($items)
  167. {
  168. $cont = 1;
  169. foreach ($items as $key => $item)
  170. {
  171. $rowItem = new StdClass;
  172. $action_del = new TAction(array($this, 'onDeleteItemPedido'));
  173. $action_del->setParameter('item_pedido_id_row_id', $key);
  174. $action_edi = new TAction(array($this, 'onEditItemPedido'));
  175. $action_edi->setParameter('item_pedido_id_row_id', $key);
  176. $button_del = new TButton('delete_item_pedido'.$cont);
  177. $button_del->class = 'btn btn-default btn-sm';
  178. $button_del->setAction($action_del, '');
  179. $button_del->setImage('fa:trash-o');
  180. $button_del->setFormName($this->form->getName());
  181. $button_edi = new TButton('edit_item_pedido'.$cont);
  182. $button_edi->class = 'btn btn-default btn-sm';
  183. $button_edi->setAction($action_edi, '');
  184. $button_edi->setImage('bs:edit');
  185. $button_edi->setFormName($this->form->getName());
  186. $rowItem->edit = $button_edi;
  187. $rowItem->delete = $button_del;
  188. $rowItem->item_pedido_produto_id = '';
  189. if (isset($item['item_pedido_produto_id']) && $item['item_pedido_produto_id'])
  190. {
  191. TTransaction::open('pharmaped');
  192. $produto = Produto::find($item['item_pedido_produto_id']);
  193. $rowItem->item_pedido_produto_id = $produto->render('{nome}');
  194. TTransaction::close();
  195. }
  196. $rowItem->item_pedido_quantidade = isset($item['item_pedido_quantidade']) ? $item['item_pedido_quantidade'] : '';
  197. $rowItem->item_pedido_qtd_atendida = isset($item['item_pedido_quantidade']) ? $item['item_pedido_qtd_atendida'] : '';
  198. $rowItem->item_pedido_valor = isset($item['item_pedido_valor']) ? $item['item_pedido_valor'] : '';
  199. $this->item_pedido_list->addItem($rowItem);
  200. $cont ++;
  201. }
  202. }
  203. }
  204. /**
  205. * Edita item do pedido
  206. * @param $param Request
  207. */
  208. public function onEditItemPedido( $param )
  209. {
  210. TSession::setValue('editaitem',true);
  211. $data = $this->form->getData();
  212. // read session items
  213. $items = TSession::getValue('item_pedido_items');
  214. // get the session item
  215. $item = $items[$param['item_pedido_id_row_id']];
  216. $data->item_pedido_produto_id = $item['item_pedido_produto_id'];
  217. $data->item_pedido_quantidade = $item['item_pedido_quantidade'];
  218. $data->item_pedido_qtd_atendida = $item['item_pedido_qtd_atendida'];
  219. $data->item_pedido_valor = $item['item_pedido_valor'];
  220. $data->item_pedido_id = $param['item_pedido_id_row_id'];
  221. // fill product fields
  222. $this->form->setData( $data );
  223. $this->onReload( $param );
  224. }
  225. /**
  226. * Exclui item do pedido
  227. * @param $param Request
  228. */
  229. public function onDeleteItemPedido( $param )
  230. {
  231. $data = $this->form->getData();
  232. $data->item_pedido_produto_id = '';
  233. $data->item_pedido_quantidade = '';
  234. $data->item_pedido_qtd_atendida = '';
  235. $data->item_pedido_valor = '';
  236. $this->form->setData( $data );
  237. // read session items
  238. $items = TSession::getValue('item_pedido_items');
  239. // delete the item from session
  240. unset($items[$param['item_pedido_id_row_id']]);
  241. TSession::setValue('item_pedido_items', $items);
  242. $this->onReload( $param );
  243. }
  244. /**
  245. * Limpa formulário
  246. * @param $param Request
  247. */
  248. public function onClear( $param )
  249. {
  250. $this->form->clear();
  251. TSession::setValue('item_pedido_items', null);
  252. $this->onReload();
  253. }
  254. /**
  255. * Salva pedido
  256. * @param $param Request
  257. */
  258. public function onSave($param = null)
  259. {
  260. try
  261. {
  262. TTransaction::open('pharmaped');
  263. $this->form->validate();
  264. $data = $this->form->getData();
  265. $object = new Pedido;
  266. $object->fromArray( (array) $data);
  267. $object->store();
  268. $this->storeItems('PedidoItem', 'pedido_id', $object, 'item_pedido',
  269. function($masterObject, $detailObject) {
  270. $masterObject->valor_total += ($detailObject->quantidade * $detailObject->valor);
  271. });
  272. $object->store();
  273. $data->id = $object->id;
  274. $farma = Pedido::getFarma($object->cliente_id);
  275. $this->form->setData($data);
  276. TTransaction::close();
  277. $editaitem = TSession::getValue('editaitem');
  278. if($editaitem == false)
  279. {
  280. $sysuserid = TSession::getValue('sysuserid');
  281. }
  282. new TMessage('info', AdiantiCoreTranslator::translate('Record saved'));
  283. TSession::setValue('editaitem',false);
  284. }
  285. catch (Exception $e)
  286. {
  287. new TMessage('error', $e->getMessage());
  288. $this->form->setData( $this->form->getData() );
  289. TTransaction::rollback();
  290. }
  291. }
  292. /**
  293. * Edita formulário
  294. * @param $param Request
  295. */
  296. public function onEdit( $param )
  297. {
  298. try
  299. {
  300. if (isset($param['key']))
  301. {
  302. $key = $param['key'];
  303. TTransaction::open('pharmaped');
  304. $object = new Pedido($key);
  305. $this->loadItems('PedidoItem', 'pedido_id', $object, 'item_pedido');
  306. $this->form->setData($object);
  307. $this->onReload();
  308. TTransaction::close();
  309. }
  310. else
  311. {
  312. $this->form->clear();
  313. }
  314. }
  315. catch (Exception $e)
  316. {
  317. new TMessage('error', $e->getMessage());
  318. TTransaction::rollback();
  319. }
  320. }
  321. /**
  322. * Exibe a página
  323. * @param $param Request
  324. */
  325. public function show()
  326. {
  327. if (!$this->loaded AND (!isset($_GET['method']) OR $_GET['method'] !== 'onReload') )
  328. {
  329. $this->onReload( func_get_arg(0) );
  330. }
  331. parent::show();
  332. }
  333. }
  334. ?>
</your>
AM

Resolvido!

Após pesquisar bastante, vi que parece haver um problema com o THidden quando usado com funções publicas,
então o problema foi contornado da seguinte maneira:

Na Action onSave redefino o valor do campo direto no objeto $data->id_grupo = TSession::getValue('idgrupo').

Vlew pessoal.
NR

Alan, por questões de segurança é melhor fazer direto no onSave mesmo, para evitar que o usuário manipule os valores dos hiddens.

Mas não há nenhum problema com o THidden. O que devia estar ocorrendo era que o valor setado na função __construct era sobrescrito na função onEdit.
 
  1. <?php
  2. public function onEdit( $param )
  3. {
  4. // em caso de edicao
  5. if (isset($param['key']))
  6. {
  7. ...
  8. }
  9. // novo registro
  10. else
  11. {
  12. // ao criar um novo registro, o formulário era zerado, inclusive o valor definido no hidden
  13. $this->form->clear();
  14. }
  15. }
  16. ?>
AM

Show Nataniel, vlew amigo.