GT
Erro cortina lateral
Pessoal estou tentando fazer um cadastro simples e ainda nao consegui (estou começando no FW)
- <?php
- class GrupoForm extends TPage
- {
- private $form;
- use Adianti\Base\AdiantiStandardFormTrait;
- public function __construct()
- {
- parent::__construct();
- $this->setDatabase('teste');
- $this->setActiveRecord('Grupo');
-
- parent::setTargetContainer('adianti_right_panel');
-
- $this->form = new BootstrapFormBuilder;
- $this->form->setFormTitle('Grupos');
- //$this->form->setClientValidation(true);
-
- $grupo_id = new TEntry('grupo_id');
- $descricao= new TEntry('descricao');
- $comissao = new Tentry('comissao');
- $preco_etiqueta = new TCombo('preco_etiqueta');
- $mostra_catalogo = new TCombo('mostra_catalogo');
- $carga_tributaria = new TEntry('carga_tributaria');
- $max_parcelas = new TEntry('numero_max_parcelas');
- $comissao->setNumericMask(2, ',', '.', true);
- $carga_tributaria->setNumericMask(2, ',', '.', true);
-
- $grupo_id->setEditable(false);
-
- $items = ['S' => 'Sim','N' => 'Não'];
- $preco_etiqueta->addItems($items);
- $mostra_catalogo->addItems($items);
- $preco_etiqueta->setValue('N');
- $mostra_catalogo->setValue('N');
- $comissao->setValue(0);
- $carga_tributaria->setValue(0);
- $max_parcelas->setValue(0);
-
- $this->form->addFields([new TLabel('Código')],[$grupo_id]);
- $this->form->addFields([new TLabel('Descrição','red')],[$descricao]);
- $this->form->addFields([new TLabel('Max Parcelas')],[$max_parcelas],[new TLabel('Comissão')],[$comissao],[new TLabel('% Carga Tributária')],[$carga_tributaria]);
- $this->form->addFields([new TLabel('Preço etiqueta')],[$preco_etiqueta],[new TLabel('Mostra catálogo')],[$mostra_catalogo]);
- $descricao->addValidation('Descrição', new TRequiredValidator);
-
- $this->form->addAction('Salvar', new TAction([$this, 'onSave']),'fa:save green');
- $this->form->addActionLink('Limpar', new TAction([$this, 'onClear']),'fa:eraser red');
- $this->form->addHeaderActionLink('Fechar', new TAction([$this, 'onClose']),'fa:times red');
-
- parent::add($this->form);
-
-
- }
- public static function onClose()
- {
- TScript::create('Template.closeRightPanel()');
- }
- /*
- public function onEdit($param)
- {
- try
- {
- TTransaction::open('teste');
- if (isset($param['key']))
- {
- $key = $param['key'];
- $grupo = new Grupo($key);
- $this->form->setData($grupo);
- }
- else
- {
- $this->form->clear(true); // limpa o formulario e deixa os campos default (true)
- }
-
- TTransaction::close();
- }
- catch (Exception $e)
- {
- new TMessage('erro',$e->getMessage());
- TTransaction::rollback();
- }
-
- }
-
- public function onClear()
- {
- $this->form->clear(true); // limpa o formulario e deixa os campos default (true)
- }
-
- public function onSave($param)
- {
- new TMessage('info','começando');
- try
- {
- TTransaction::open('teste');
- $this->form->validate();
- $data = $this->form->getData();
-
- $grupo = new Grupo;
- $grupo->fromArray( (array) $data);
- $grupo->store();
-
- TScript::create('Template.closeRightPanel()');
-
- $this->form->setData($grupo);
- TTransaction::close();
- }
- catch (Exception $e)
- {
- new TMessage('erro',$e->getMessage());
- TTransaction::rollback();
- }
- }
- */
- }
- No modo normal a gravaçao ocorre sem problemas, quando tento usar CORTINA LATERAL da erro: "O campo descriçao é obrigatorio" e não salva os dados.
- Alguem pode me ajudar?
É preciso debugar pra entender.
Veja o conteúdo do form.
No método onSave use var_dump($param) para ver o conteúdo postado.
No seu código existe uma validação definida para o campo descrição.
Se o mesmo for em branco, a regra é aplicada. Me parece correto.
Obrigado pela ajuda Marcelo,
Nao sei se voce observou, mas o problema so ocorre quando uso cortina lateral
Sim. Eu vi.
Estou neste momento migrando uma aplicação de itens de orçamentos com cortina lateral e está tudo em ordem.
Verifique se os dados estão sendo postados corretamente. O var_dump ajuda.
Veja o construtor da classe BootstrapFormBuilder:
Quando você não informa o nome do formulário ao criar a instância, por padrão é usado "my_form". Usando o recurso de cortina, provavelmente o formulário abaixo dela também possui o mesmo nome e, com isso, os dados do outro formulário devem estar sendo enviados no post.
Sempre informe nome distintos para os forms:
Obrigado Natanael, sua observação é precisa. Consegui editar/salvar os dados.
Para encaixar neste mesmo post:
O método onSave é herdado do Trait. Como atualizar o Datagrid (onReload) no momento que clica no botão salvar?
Mais uma vez, obrigado.