CB
Editar e salvar com TWindow
Estou com dificuldades para usar o TWindow.
Tenho um datagrid (na classe BibliografiaList que é um TPage) listando vários itens, com uma action para editar cada item. Ao clicar na action, chamo o método onEdit da classe BibliografiaForm, com o formulário onde eu posso alterar o registro e salvar.
O código funciona perfeitamente bem se o BibliografiaForm for um TPage, mas se eu colocar como um TWindow, não consigo salvar.
Quando clico para editar na action da BibliografiaList, o formulário BibliografiaForm (Twindow) aparece preenchido com as informações do registro que estou tentando editar (da mesma forma que se for TPage), mas ao tentar salvar aparece um erro dizendo que os campos Livro e Disciplina são obrigatórios, e então os campos do formulário ficam em branco.
Não estou alterando nada do código, exceto o extend que altero entre TPage e TWindow, se for TPage funciona, se for TWindow não.
Sou iniciante, se alguém puder me ajudar a entender, utilizando termos fáceis, agradeço :D
Tirei print das telas, pois não sei se consegui explicar direito.
Já tentei procurar no fórum, mas talvez por ser noob não encontrei solução (tentei algumas, mas não deram certo).
Tenho um datagrid (na classe BibliografiaList que é um TPage) listando vários itens, com uma action para editar cada item. Ao clicar na action, chamo o método onEdit da classe BibliografiaForm, com o formulário onde eu posso alterar o registro e salvar.
O código funciona perfeitamente bem se o BibliografiaForm for um TPage, mas se eu colocar como um TWindow, não consigo salvar.
Quando clico para editar na action da BibliografiaList, o formulário BibliografiaForm (Twindow) aparece preenchido com as informações do registro que estou tentando editar (da mesma forma que se for TPage), mas ao tentar salvar aparece um erro dizendo que os campos Livro e Disciplina são obrigatórios, e então os campos do formulário ficam em branco.
Não estou alterando nada do código, exceto o extend que altero entre TPage e TWindow, se for TPage funciona, se for TWindow não.
Sou iniciante, se alguém puder me ajudar a entender, utilizando termos fáceis, agradeço :D
Tirei print das telas, pois não sei se consegui explicar direito.
Já tentei procurar no fórum, mas talvez por ser noob não encontrei solução (tentei algumas, mas não deram certo).
- <?php
- class BibliografiaForm extends TWindow{
- private $form;
- public function __construct(){
- parent::__construct();
- $this->form = new BootstrapFormBuilder('form_bibliografia');
- $this->form->setFormTitle( 'Cadastro de Bibliografia' );
- $this->form->class = 'form_bibliografia';
- $id = new THidden('id');
- $livro_id = new TDBUniqueSearch('livro_id', 'database', 'LivroRecord', 'id', 'titulolivro', 'titulolivro');
- $disciplina_id = new TDBUniqueSearch('disciplina_id', 'database', 'DisciplinaRecord', 'id', 'codigodisciplina', 'codigodisciplina');
- $tipobibliografia = new TCombo('tipobibliografia');
- $obsbibliografia = new TText('obsbibliografia');
- $livro_id->setMask('{titulolivro} ({autorlivro})');
- $items = array();
- $items['c'] = 'Complementar';
- $items['b'] = 'Básica';
- $tipobibliografia->addItems($items);
- $tipobibliografia->setDefaultOption(FALSE);
- $livro_id->addValidation('Livro' , new TRequiredValidator);
- $disciplina_id->addValidation('Disciplina' , new TRequiredValidator);
- $this->form->addFields([$id]);
- $this->form->addFields([new TLabel('Livro <i>*</i>')], [$livro_id]);
- $this->form->addFields([new TLabel('Disciplina <i>*</i>')], [$disciplina_id]);
- $this->form->addFields([new TLabel('Tipo de bibliografia <i>*</i>')], [$tipobibliografia]);
- $this->form->addFields([new TLabel('Observações <i>*</i>')], [$obsbibliografia]);
- $this->form->addAction('Salvar', new TAction(array($this, 'onSave')), 'fa:save')->class = 'btn btn-sm btn-primary';
- $this->form->addAction('Voltar', new TAction(array('BibliografiaList', 'onReload')), 'fa:arrow-left')->class = 'btn btn-sm btn-primary';
- parent::add($this->form);
- }
- function onSave($param){
- try {
- TTransaction::open('database');
- $object = $this->form->getData('BibliografiaRecord');
- $this->form->setData($object);
- $this->form->validate();
- $object->store();
- TTransaction::close();
- } catch (Exception $e) {
- new TMessage('error', $e->getMessage());
- TTransaction::rollback();
- }
- $this->form->setData($object);
- }
- function onEdit($param = NULL){
- try {
- if(isset($param['key'])) {
- $key = $param['key'];
- TTransaction::open('database');
- $object = new BibliografiaRecord($key);
- $this->form->setData($object);
- TTransaction::close();
- }
- } catch (Exception $e){
- new TMessage('error', '<b>Erro: </b> ' . $e->getMessage() . "<br/>");
- TTransaction::rollback();
- }
- }
- }
- ?>
ac
Não sei o que é ac.
Significa que estou acompanhado o tópico.
Provavelmente os formulários da list e do form estão com o mesmo nome. Tente trocar o nome no form, conforme abaixo:
Que besteira! Era só isso mesmo! Obrigada, Nataniel, agora está funcionando perfeitamente.