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.