Formularova tovarnicka a dynamicke nacitanie databazy
- Tomato
- Člen | 9
Zdravim!
Mam problem a netusim co robim zle.
V adresary /app/forms/ mam vyvorenu tovarnicku na formular(skratena)
<?php
use Nette\Application\UI,
Nette\ComponentModel\IContainer,
Nette\Environment;
class AccInfoForm extends UI\Form {
public function __construct($disabled, IContainer $parent = NULL, $name = NULL) {
parent::__construct($parent, $name);
$this->addText('name', 'First name: ')
->setDisabled($disabled)
->controlPrototype->class = "centerControl";
$this->addText('surname', 'Surname: ')
->setDisabled($disabled)
->controlPrototype->class = "centerControl";
}
public function editableSubmit() {
$id = Nette\Environment::getUser()->getIdentity()->getId();
$values = $this->getValues();
$this->models->accountinfomodel->updateAccInfo($id, $values);
}
}
?>
a potom v prezenteri si pridam submit button
<?php
$form->onSuccess[] = callback($form, 'editableSubmit');
?>
pouzivam ten formular na viacerych miestach,akurat menim pocet vykreslenych
inputov a a submit buttonov.
Ked sa ale snazim dostat do databazy po odkliknuti buttona dostanem
Cannot read an undeclared property AccInfoForm::$models
Vie mi niekto poradit,ako do tej tovarnicky pridat dynamicke nacitavanie modelov?
- pawouk
- Člen | 172
No tak pokud můžeš načítat modely v presenteru (což předpokládám že můžeš) tak si ho jen přidej do konstrukltoru:
v presenteru:
$form = new AccInfoForm( ... , ... , ..., $this->models)
ve formu:
class AccInfoForm extends UI\Form {
protected $models;
public function __construct($disabled, IContainer $parent = NULL, $name = NULL, $models) {
$this->models = $models;
A máš to, ale stejně asi dojdeš dřív nerbo pozdějš k tomu, že tam potřebuješ mít dostupné další věci (flash zprávy, přesměrování apod.) Takže já si do nového formuláře předávám celý presenter:
v presenteru:
$form = new AccInfoForm( ... , ... , ..., $this)
ve formu
class AccInfoForm extends UI\Form {
protected $presenter;
public function __construct($disabled, IContainer $parent = NULL, $name = NULL, $presenter) {
$this->presenter = $presenter;
.....
nejakametoda(){
$this->presenter->models->.....
}
Takže to bych ti doporučil spíš, ale jinak funguje samozřejmě obojí :-)
Dodatek: Pak se nemusíš ptát v metodách formuláře Enviromnment (což by ses beztak měl snažit minimalizovat) a můžeš se ptát ve formu:
$userid = $this->presenter->user->id;
Editoval pawouk (30. 11. 2011 10:29)