Nepřenesení property objektu do události?

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

Po celodenním nettění jsem narazil na zajímavou chybu (anebo tu svoji už zkrátka nevidím):

public function editText($id) {
    $this->renderMode = "editText";

    $row = $this->model->getTextToEdit($id);

	//zde jsou normálně naplněné proměnné, echnou se, zkrátka kód proběhne
    $this->id = $id;
    $this->text = $row->text;
    $this->format = $row->format;
    $this->time = $row->time;
    $this->userId = $row->user_id;
    $this->revision = $row->revision;
}

Jenže v tom samém kódu, ve chvíli, kdy se v editText echnou požadované hodnoty, tak v následujícím kódu se v tom samém průběhu stejného skriptu vyskytnou zde už jen samé NULLy:

public function onEditFormSubmit(Form $form) {
    if ($form->isValid())
        {
            $values = $form->getValues();

            try {
               $this->model->editText($this->id /* zde je NULL */, $values["text"], $values["summary"], $values["revision"]);
            }
            catch (Exception $e) {
                $form->addError($e->getMessage());
            }

            if (!$form->hasErrors()) {
                $this->format = ""; //unsetting
                $this->redirect('this');
            }
        }
}

EDIT: Jasně, volají se v opačném pořadí :)) Jak je zavolat v takovém, jaký zamýšlím?

Editoval LastHunter (11. 4. 2009 0:26)

pmg
Člen | 372
+
0
-

Jak je zavolat v takovém, jaký zamýšlím?

Zavolat metodu editText buď před definicí formuláře, nebo z obslužného handleru onEditFormSubmit, ve kterém mimochodem není nutné kontrolovat validitu formuláře.

Ondřej Mirtes
Člen | 1536
+
0
-

Už jsme na to kápli – editText musím volat v jiné fázi prezenteru – před handlingem :)
Proč není třeba kontrolovat validitu v té události?

pmg
Člen | 372
+
0
-

Protože při nevalidním formuláři se handler nezavolá, viz Formulářová tlačítka.