Formularova tovarnicka a dynamicke nacitanie databazy

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
Tomato
Člen | 9
+
0
-

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
+
0
-

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)

Tomato
Člen | 9
+
0
-

Cool…vdaka ze rychlu odpoved,asi by som mal zacat chodit spavat,lebo ma nenapadavaju jednoduche veci…dakujem este raz :)