AppForm($this, $name) vs AppForm()

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

Pokud dobře čtu, a hlavně chápu, tak je nejlepší vytvářet formuláře následovně:

public function createComponentFormLogin($name) {
	$form = new AppForm($this, $name);
	...
	return $form;
}

A ne pouze:

public function createComponentFormLogin() {
	$form = new AppForm();
	...
	return $form;
}

Proč ale platí následující?

// Toto funguje v pořádku a dle očekávání
public function createComponentFormLogin() {
	$form = new AppForm();
	$form->setMethod('get');
	$form->setAction('http://www.example.com/doAnything.php');
	...
	return $form;
}

// Toto nefunguje
public function createComponentFormLogin($name) {
	$form = new AppForm($this, $name);
	$form->setMethod('get'); // Zde je chyba - Form::setMethod() must be called until the form is empty
	$form->setAction('http://www.example.com/doAnything.php');
	...

	return $form;
}

Jak použít setMethod() v druhém případě? Nebo pokud chci použít setMethod(), musím použít první variantu, jak píše Ondřej Mirtes v tomto příspěvku? Nebo jsem, což u mne není neobvyklé, něco špatně pochopil? Děkuji za info.

westrem
Člen | 398
+
0
-

Ak sa nemylim tak pri pouziti:

$form = new AppForm($this, $name);

sa formular hned attachne na presenter a teda sa aj naplni datami.

Napada ma pouzit nasledovnu konstrukciu:

$form = new AppForm();
$form->setMethod(Form::GET); // podla mna je lepsie pouzit na to urcenu konstantu ako tam natvrdo pchat string
$this->addComponent($form, $name); // ak chces aj $name, moze byt NULL

// Toto funguje v pořádku a dle očekávání

Si si isty, ze to funguje? Podla mna sa ti tam ten action uz nenastavi, zase raz ide o to, ze pri attachnuti sa natvrdo nastavuje action.

Editoval westrem (16. 9. 2010 18:10)

Ondřej Mirtes
Člen | 1536
+
0
-

Já si stojím za createComponentName() a new AppForm;, protože je to nejméně WTF a vypadá to elegantně.

A v těch 5% případů, kdy potřebuji nastavit jinou action a method (snad jen u vyhledávacího formuláře a při odesílání na API cizí služby), holt ten formulář připojím pomocí konstruktoru.

Patrik Votoček
Člen | 2221
+
0
-

Já si stojím za createComponentName($name) a new AppForm($this, $name);, protože je to nejméně WTF a vypadá to elegantně.

Protože pak se z 5% případů stává 0.5% případů… Navíc se nejedná jen o nastavení akce ale jak už jsem napsal jinde tak třeba o problémy u dynamických formulářů apod.

Edit: abych jenom neplácal tak řešení problému:

public function createComponentFormLogin() {
        $form = new AppForm;
        $form->setMethod('get');
	$form->setParent($this);
        $form->setAction('http://www.example.com/doAnything.php');
        ...
        return $form;
}
toka
Člen | 253
+
0
-

Takže $form->setParent($this) zařídí vše, co by jinak bylo vykonáno přes:

public function createComponentFormLogin($name) {
	$form = new AppForm($this, $name);
        ...
        return $form;
}

OK. Super. Už se těším na hotovou dokumentaci, až bude vše na jednom místě :-D

Patrik Votoček
Člen | 2221
+
0
-

mám takový pocit že jsem ti to už psal. Ale necituj prosím zbytečně celý předchozí post nemá to smysl a za*** to forum. (citaci jsem odstranil)

toka
Člen | 253
+
0
-

Ano, promiň. „Minule“ jsem vše špatně pochopil. Myslel jsem, že se ti zdálo, že jsem svým příspěvkem příliš zopakoval to, co napsal někdo přede mnou – tedy nezmínil jsem až tak nic nového. Teď už to chápu. Dám si na citace pozor.