spouštění createComponent
- Azathoth
- Člen | 495
Zdravím,
chtěl bych se zeptat, proč se metoda createComponentMyForm spouští jak při
renderování formuláře myForm, tak při klinutí na submit tlačítko.
Dále bych se chtěl zeptat, proč se při tomto druhém zavolání
z presenteru vytratí všechny property, které jsem si tam předtím
uložil.
Konkrétně:
mám soubor edit.latte:
{block content}
{control changePublicProfileForm}
{/block}
a v presenteru mám metody:
<?php
public function renderEdit($id) {
$this->id = $id;
}
protected function createComponentChangePublicProfileForm() {
if (!($this->getUser()->isAllowed(AuthorizationHandler::EDIT_PROFILE_SETTINGS)) {
throw new AuthenticationException("You can not edit public profile of user with id ".$this->id);
}
$user = $this->userHandler->getUserWithId($this->id);
$form = $this->formFactory->createChangePublicProfileForm($user);
$form->onSuccess[] = $this->changePublicProfileFormSucceeded;
return $form;
}
public function changePublicProfileFormSucceeded($form) {
//uložení dat z formuláře do databáze
}
?>
a mám problém v tom, že když vyplním formulář a kliknu na submit, tak se zavolá metoda createComponentChangePublicProfileForm a hlásí, že $this->id == null.
Nevíte, proč se to tak děje či jak se s tím vypořádat?
Děkuji za odpovědi.
- David Matějka
- Moderator | 6445
viz zivotni
cyklus presenteru (zpracovani formulare jsou zpracovani signalu – neboli
handle metody)
render je tedy pozde, musis v action
Editoval matej21 (28. 8. 2014 13:07)
- David Matějka
- Moderator | 6445
nn, pri vykreslovani nedochazi ke zpracovani. createComponent* metoda se vola, az kdyz je ta komponenta (formular) potreba. V pripade vykreslovani je potreba az v sablone. Po odeslani dochazi k jeho zpracovani a proto je ho potreba vytvorit drive (tedy na stejne urovni jako ty handle* metody)
Editoval matej21 (28. 8. 2014 13:24)