EL
Erro no uso de traits
Ola pessoal.
Estou seguindo os exemplos do curso do adianti. Relativo a listagem usando trait.
Ao digitar alguma coisa no formulario de busca é mostrada uma mensagem de erro.
Call to a member function getData() on null
/var/www/html/emilio/adianti74/framework/lib/adianti/base/AdiantiStandardCollectionTrait.php:159
Alguem pode me ajudar?
Segue o codigo fonte.
class UFTraitList extends TPage
{
private $form_busca;
private $datagrid;
private $pageNavigation; // objeto de paginacao
use AdiantiBaseAdiantiStandardListTrait;
public function __construct()
{
parent::__construct();
$this->setDatabase('med');
$this->setActiveRecord('UF');
$this->addFilterField('nm_uf','like','nome_busca');
$this->setDefaultOrder('id_uf','asc');
// busca
$this->form_busca = new BootstrapFormBuilder;
$this->form_busca->setFormTitle('Estados');
$nome_busca = new TEntry('nome_busca');
$this->form_busca->addFields([new TLabel('Nome')],[$nome_busca]);
$this->form_busca->addAction('Buscar',new TAction([$this, 'onSearch']),'fa:search blue');
$this->form_busca->addActionLink('Novo', new TAction(['CadUFTrait','onClear']),'fa:plus-circle green');
$this->form_busca->setData(TSession::getValue(__CLASS__.'_filter_data'));
// datagrid
$this->datagrid = new BootstrapDatagridWrapper( new TDataGrid );
$this->datagrid->width = '100%';
// Definindo as colunas
$col_id = new TDataGridColumn('id_uf', 'ID', 'right', '10%');
$col_nome = new TDataGridColumn('nm_uf', 'Nome', 'left', '80%');
$col_sigla = new TDataGridColumn('sigla', 'Sigla','right','10%');
// incluir ordenacao
$col_id->setAction( new TAction([$this,'onReload']),['order' => 'id_uf']);
$col_nome->setAction(new TAction([$this,'onReload']),['order' => 'nm_uf']);
// Adicionar colunas na datagrid
$this->datagrid->addColumn($col_id);
$this->datagrid->addColumn($col_nome);
$this->datagrid->addColumn($col_sigla);
$action1 = new TDataGridAction(['CadUFTrait','onEdit'],['key'=> '{id_uf}']);
// $action1 = new TDataGridAction(['CadUF','onEdit'],['key'=> '{id_uf}']);
$action2 = new TDataGridAction([$this,'onDelete'],['key'=>'{id_uf}']);
// Adicionar acoes na datagrid
$this->datagrid->addAction($action1,'Editar' ,'fa:edit blue');
$this->datagrid->addAction($action2,'Excluir','fa:trash-alt red');
$this->datagrid->createModel();
$this->pageNavigation = new TPageNavigation;
$this->pageNavigation->setAction(new TAction([$this,'onReload']));
$panel = new TPanelGroup();
$panel->add($this->datagrid);
// $panel->Title = 'Estados';
$panel->style = 'height:600px';
$panel->addFooter($this->pageNavigation);
$vbox = new TVBox;
$vbox->style = 'width:100%';
$vbox->add($this->form_busca);
$vbox->add($panel);
parent::add($vbox);
}
}
Estou seguindo os exemplos do curso do adianti. Relativo a listagem usando trait.
Ao digitar alguma coisa no formulario de busca é mostrada uma mensagem de erro.
Call to a member function getData() on null
/var/www/html/emilio/adianti74/framework/lib/adianti/base/AdiantiStandardCollectionTrait.php:159
Alguem pode me ajudar?
Segue o codigo fonte.
class UFTraitList extends TPage
{
private $form_busca;
private $datagrid;
private $pageNavigation; // objeto de paginacao
use AdiantiBaseAdiantiStandardListTrait;
public function __construct()
{
parent::__construct();
$this->setDatabase('med');
$this->setActiveRecord('UF');
$this->addFilterField('nm_uf','like','nome_busca');
$this->setDefaultOrder('id_uf','asc');
// busca
$this->form_busca = new BootstrapFormBuilder;
$this->form_busca->setFormTitle('Estados');
$nome_busca = new TEntry('nome_busca');
$this->form_busca->addFields([new TLabel('Nome')],[$nome_busca]);
$this->form_busca->addAction('Buscar',new TAction([$this, 'onSearch']),'fa:search blue');
$this->form_busca->addActionLink('Novo', new TAction(['CadUFTrait','onClear']),'fa:plus-circle green');
$this->form_busca->setData(TSession::getValue(__CLASS__.'_filter_data'));
// datagrid
$this->datagrid = new BootstrapDatagridWrapper( new TDataGrid );
$this->datagrid->width = '100%';
// Definindo as colunas
$col_id = new TDataGridColumn('id_uf', 'ID', 'right', '10%');
$col_nome = new TDataGridColumn('nm_uf', 'Nome', 'left', '80%');
$col_sigla = new TDataGridColumn('sigla', 'Sigla','right','10%');
// incluir ordenacao
$col_id->setAction( new TAction([$this,'onReload']),['order' => 'id_uf']);
$col_nome->setAction(new TAction([$this,'onReload']),['order' => 'nm_uf']);
// Adicionar colunas na datagrid
$this->datagrid->addColumn($col_id);
$this->datagrid->addColumn($col_nome);
$this->datagrid->addColumn($col_sigla);
$action1 = new TDataGridAction(['CadUFTrait','onEdit'],['key'=> '{id_uf}']);
// $action1 = new TDataGridAction(['CadUF','onEdit'],['key'=> '{id_uf}']);
$action2 = new TDataGridAction([$this,'onDelete'],['key'=>'{id_uf}']);
// Adicionar acoes na datagrid
$this->datagrid->addAction($action1,'Editar' ,'fa:edit blue');
$this->datagrid->addAction($action2,'Excluir','fa:trash-alt red');
$this->datagrid->createModel();
$this->pageNavigation = new TPageNavigation;
$this->pageNavigation->setAction(new TAction([$this,'onReload']));
$panel = new TPanelGroup();
$panel->add($this->datagrid);
// $panel->Title = 'Estados';
$panel->style = 'height:600px';
$panel->addFooter($this->pageNavigation);
$vbox = new TVBox;
$vbox->style = 'width:100%';
$vbox->add($this->form_busca);
$vbox->add($panel);
parent::add($vbox);
}
}
Gostaria de ajuda no sentido de entender o significado do erro que aparece no meu codigo, embora eu esteja seguindo o curso.
Call to a member function getData() on null
/var/www/html/emilio/adianti74/framework/lib/adianti/base/AdiantiStandardCollectionTrait.php:159
O que significa, e como resolver.
Agradeço.
O erro diz que você está chamando o método "getData" em uma variável que não existe.
A linha 159 da trait tem o seguinte:
Ou seja, "$this->form" é null, então não é possível chamar "getData".
No seu código, use "$this->form" ao invés de "$this->form_busca", pois é essa variável que a trait padrão utiliza.