Připojení do databáze pro každou Form komponentu
Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
- Desttro
- Člen | 126
Zdravím, chtěl jsem se zeptat, jak navázat spojení s databází pro každou Form. V každém presenteru používám Nette\Database\Context, příklad:
/** @var Nette\Database\Context */
private $database;
public function __construct(\Nette\Database\Context $database)
{
parent::__construct();
$this->database = $database;
}
no, a když to chci dát do svojeho formuláře, kde už kontruktor je, tak to (asi logicky) nejede. Zde je příklad mého formuláře:
namespace FrontModule\Forms;
use Nette\Application\UI\Form;
class SearchForm extends Form
{
public function __construct($parent, $name) {
parent::__construct($parent, $name);
$this->addSelect('model');
$this->onSuccess[] = $this->formSubmited;
}
public function formSubmited(\Nette\Forms\Controls\ImageButton $button)
{
}
}
Komponentu volám potom zvlášť v presenteru takhle:
protected function createComponentSearchForm($name) {
return new SearchForm($this, $name);
}
Jak prosím navázat spojení s databází?
Děkuji.
- Oli
- Člen | 1215
- Přepsal bych si formulář jako komponentu.
- Nemusíš v potomkovi volat stejý presenter jako v předkovi. Takže to klidně můžeš předat do toho konstruktoru:
class SearchForm extends Form
{
public function __construct($parent, $name, \Nette\Database\Context $database) {
parent::__construct($parent, $name);
$this->database = $database;
// ...
}
}
3. Spíš než kontext bych si předal nějakou třídu, která bude pracovat s databází. Nemusíš pak všude psát ten samej příkaz pro např. uložení. Zavoláš jen tu repository service a na ní zavoláš něco jako save($array).