nefunkční odeslání formuláře přes 2 komponenty

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

Ahoj,
kdyz si vykresluju formular (viz níže) tak se mi vykresli ale nejde odeslat… je tam action=""
Nevíte prosim někdo co s tim?
Dík Sin
template:

<?php
{control loginForm}
?>

Presenter:

<?php
public function createComponentLoginForm()
{
	return new AuthControlForm();
}
?>

a pak mam v komponente AuthControlForm:

<?php
public function render()
{
	$form = new AppForm();
	$form->addText('username', 'Username:');
	$form->addSubmit('login', 'Login');
	$form->onSubmit[] = array($this, 'loginFormSubmitted');
	echo $form;
}

public function loginFormSubmitted($form){
	$data = $form->getValues();
	foreach ($data as $value)
		echo $value;
?>
Panda
Člen | 569
+
0
-

Ten formulář v té komponentě musíš vytvořit už v konstruktoru a musíš ho ke komponentě i připojit (tzn. konstruktor AppForm($this, 'nazevFormulare')). Takhle se totiž formulář nadefinuje až při vykreslování a to už je pozdě.

redhead
Člen | 1313
+
0
-
  1. formulář nemáš připojen ke komponentě, čili neví jak spravit odkaz ($form = new AppForm($this, „meno“)
  2. v render metodě je už pozdě vytvářet form, protože formulář je validován před tím, čili si udělej rovnou z toho formu komponentu (v té komponentě)
public function createComponentLoginForm()
{
	$form = new AppForm();	//nebo AppForm($this, "loginForm") a pak už není nutný return $form; na konci
        $form->addText('username', 'Username:');
        $form->addSubmit('login', 'Login');
        $form->onSubmit[] = array($this, 'loginFormSubmitted');
	return $form;
}
public function render()
{
	echo $this['loginForm'];
}
sin
Člen | 82
+
0
-

zkusil jsem to predelat na

<?php
public function createComponentLoginForm()
{
	$form = new AppForm($this, "loginForm");
	$form->addText('username', 'Username:');
	$form->addSubmit('login', 'Login');
	$form->onSubmit[] = array($this, 'loginFormSubmitted');
	echo $form;
}
public function loginFormSubmitted($form){
	$data = $form->getValues();
	foreach ($data as $value)
		echo $value;
}

public function render(){
	$this['loginForm'];
}
?>

ale hazi mi to chybu: Nested forms are forbidden.

Panda
Člen | 569
+
0
-

Zpráva je celkem jasná – nemůžeš mít formulář ve formuláři. Není náhodou ta komponenta AuthControlForm potomek třídy AppForm? Pošli sem případně celý její kód…

Ondřej Mirtes
Člen | 1536
+
0
-

Pokud chceš mít čistě jen formulář jako komponentu, je lepší ho podědit od AppForm a přidávat jeho prvky v konstruktoru – nemusíš psát další továrničku a starat se o renderování.

sin
Člen | 82
+
0
-

Supr, děkuju všem co přispěli. Problem vyřešen. Snad si to už příště uvědomím sám.

PetrP
Člen | 587
+
0
-

jenom upozornim ze echo $form; při vytváření komponenty je vysloveně spatně. (aby si to tady někdo nepřečet a nezačal používat)