Formulář není spojen s presenterem

- loov
 - Člen | 49
 
Pokusím se Vám nastínit svoji situaci. Po kliknutí na odkaz ve stránce chci, aby se mi zobrazil formulář s předvyplněnými daty. Snažím se to řešit nějak takto:
V šabloně je vykreslen odkaz:
<?php
<a n:href="vykresliEditForm! $task->data->idz">Upravit</a>
?>
V presenteru pak mám metodu na vytvoření formuláře:
<?php
    public function handleVykresliEditForm($idz)
    {
	$form = $this->createComponentEditTaskForm($idz);
	$form->onOkClick[] = callback($this, 'editTaskOkClick');
	$this->template->form = $form->render();
    }
?>
Samotný formulář získávám přez tuto metodu:
<?php
    public function  createComponentEditTaskForm($idz)
    {
	if(!empty ($idz))
	{
	    $task = Task::getTaskById($idz);
		if (!isset($task))
		    throw new ExceptionResourceNotFound("Požadované zadání nebylo nalezeno.");
	}
	else
	{
	    throw new ExceptionResourceNotFound("Nemohu načíst data z databáze. Neznámé idz.");
	}
	$form = new formZadaniMaturitniPrace($task);
	return $form;
    }
?>
V definici formuláře mám
<?php
        /** tovarnicka na formular */
        public function createComponentFormZadaniMaturitniPrace($name)
        {
                $form = new NAppForm($this, $name);
?>
A zde zjišťuju zda byl form odeslán
<?php
        if(!$form->isSubmitted())
                $form->setDefaults($this->defaults);
?>
Jenže pokud nyní kliknu na odkaz ve stránce pro vykreslení formu vyskočí mi laděnka s touto chybou Form is not anchored and therefore can not determine whether it was submitted. Mohli by jste mi prosím nějak poradit co bych měl udělat?
Editoval loov (25. 2. 2011 7:57)

- Foowie
 - Člen | 269
 
formZadaniMaturitniPrace je komponenta která obsahuje
továrničku na formulář? „A zde zjišťuju zda byl form odeslán“ …
kde zde? V action metodě? V render metodě? v konstuktoru komponenty
formZadaniMaturitniPrace? v továrničce formuláře?
Pokud je formZadaniMaturitniPrace, předej i v konstruktoru
presenter a jméno komponenty, jako například do formuláře.

- Mikulas Dite
 - Člen | 756
 
Tohle se nepoužívá
$this->createComponentEditTaskForm($idz);
Jo, je to hodně matoucí…
Místo toho se to volá takhle (https://api.nette.org/…ntainer.html#…)
$this->getComponent('editTaskForm');
// resp.
$this['editTaskForm'];
Edit: to tvoje createComponentEditTaskForm ale není
továrnička v pravém slova smyslu, tedy takový, která by generovala
component. Jestli je třída formZadaniMaturitniPrace
jenom potomek Form, tak to stačí zaregistrovat pomocí https://api.nette.org/…ntainer.html#…
$this->addComponent(IComponent $component, string $name);
Původně tu „továrničku“ voláš s parametrem $task, ten
ale patří až metodě render. Továrnička dostává automaticky
$name.
Ujasni si, co je pravá IComponent a ověř, jestli ji vždy
registruješ pomocí továrničky, která se volá správně.
Editoval Mikulas Dite (24. 2. 2011 21:23)

- loov
 - Člen | 49
 
Fowie:
- ano formZadaniMaturitniPrace je třída která dědí z NControl a obsahuje továrničku na formulář
 
<?php
        public function createComponentFormZadaniMaturitniPrace($name)
        {
                $form = new NAppForm($this, $name);
?>
- a dále v té továrničce se také nachází onen if
 
<?php
        if(!$form->isSubmitted())
                $form->setDefaults($this->defaults);
?>
merlinof:
- né v tom by chyba být neměla
 
Mikulas Dite:
- metoda $this->createComponentEditTaskForm($idz) není továrnička jako
	taková to máš pravdu tahle metoda mě vlastně má získat data z databáze
	prostřednictvím $idz
		
- pak se v ní (
createComponentEditTaskForm) již zavolá formZadaniMaturitniPrace($task) což už je třída obsahující továrničku a která má za úkol vrátit naplněný formulář daty 
 - pak se v ní (
 - ona totiž žádná komponenta EditTaskForm ne-existuje, používám jeden
	formulář na editaci i zadávání dat, onen
	
createComponentFormZadaniMaturitniPrace, který je ve tříděformZadaniMaturitniPrace, takže si myslím, že$this['editTaskForm'];by mě nepomohlo - tedy já když chci vytvořit editační formulář (z metody
	
createComponentEditTaskFormse zda že by to mžl být formulář s názvem editTaskForm), tak vlastně chci vytvořitcreateComponentFormZadaniMaturitniPracea naplnit ho daty 
Snad to říkám dost srozumitelně, doufám… :-) Teď mě napadá, že
problém by skutečně mohl být v typo, protože já se snažím skrze
createComponentEditTaskForm vytvořit
createComponentFormZadaniMaturitniPrace. No dneska si k tomu sednu
mrknu na to. Moc díky za odpovědi ;-) A jestli Vás ještě
něco napadne sem s tím, budu jen rád když se naučím s nette zacházet co
nejlépe.
Editoval loov (25. 2. 2011 9:52)