Lançado Adianti Framework 7.6!
Clique aqui para saber mais
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?

Pacotão Dominando o Adianti Framework 7
O material mais completo de treinamento do Framework.
Curso em vídeo aulas + Livro completo + Códigos fontes do projeto ERPHouse.
Conteúdo Atualizado! Versão 7.4


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