Zdravím. Narazil jsem na problém při vytváření komponenty resp. jejím připojování k presenteru.
Ke konfiguraci komponenty se používá metoda attached, která volá metodu configure, jež je překrytá v poděděné komponentě. Problém však je, když si do odděděné komponenty předávám instanci databáze.
Musím volat konstruktor takto:
use NiftyGrid\NDataSource;
use NiftyGrid\Grid;
class GridControl extends Grid {
/** @var Nette\Database\Table\Selection */
private $table;
public function __construct(Nette\ComponentModel\IContainer $parent = NULL, $name = NULL, Nette\Database\Table\Selection $table)
{
$this->table = $table;
parent::__construct($parent, $name);
}
protected function configure($presenter)
{
$dataSource = new NDataSource($this->table);
.....
}
}
Instanci databáze musím přiřadit před voláním rodičovského konstruktoru, protože jinak dojde po zavolání parent::__construct($parent, $name); k zavolání attached a následném volání configure a zde ještě databáze není nastavena (nevrátil jsem se ještě z konstruktoru).
Této varianty konstruktoru využít musím, protože jinak je v metodě render vyhozena
Nette\InvalidArgumentException
Component with name 'columns' does not exist.
protože se ještě nezavolal attached.
Továrnička:
protected function createComponentGrid($name)
{
$table = $this->database->table('wm_licenses');
$control = new GridControl($this, $name, $table);
return $control;
}
Zdravím. Narazil jsem na problém při vytváření komponenty resp. jejím připojování k presenteru. Ke konfiguraci komponenty se používá metoda attached, která volá metodu configure, jež je překrytá v poděděné komponentě. Problém však je, když si do odděděné komponenty předávám instanci databáze. Musím volat konstruktor takto:
Instanci databáze musím přiřadit před voláním rodičovského konstruktoru, protože jinak dojde po zavolání parent::__construct($parent, $name); k zavolání attached a následném volání configure a zde ještě databáze není nastavena (nevrátil jsem se ještě z konstruktoru).
Této varianty konstruktoru využít musím, protože jinak je v metodě render vyhozena
protože se ještě nezavolal attached.
Továrnička: