Ze dvou formulářů jeden (tichá registrace)?

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

Ahoj, prosím o radu, tohle už určitě někdo řešil. :) Mám své dva formuláře jako komponenty:

Registrační (email, heslo, potvrzení hesla, jméno, telefon, město, submit)

Přidávající (typ, kategorie, titulek, text, cena, obrázky, submit)

A rád bych udělal tichou registraci = potřebuji z nich udělat jeden, upravený, a nebo alespoň odeslat první a potom druhý.

On není problém prostě udělat další formulář, že, ale ten a) bude celkem monstrózní a b) je to WET – opakovaný kód, což je fuj. Otázka je, jestli řešení/vyřešení tohohle nebude znamenat víc potíží, práce, kódu a režie než kolik z toho bude ve výsledku užitku… á přesně proto prosím zkušenější o nasměrování. :)

Díky předem všem!

Pavel Kravčík
Člen | 1196
+
0
-

Já používám relativně nehezkou věc. Formulář v komponentně jsem rozsekal na 3 části.

Hlavička, Tělo, Patička. Hlavička má nastavení formuláře, tělo má klasické addText() a v patičce mám onSuccess, tlačítka a podobně.

Když spojuji dva formuláře, tak si zavolám to tělo nebo část jeho containeru. Takže mám něco podobného následovně:

	protected function createComponentPridavajiciForm()
	{
		$form = $this->getForm();
		$form['prid'] = $this->getPridavajici(); //píšu z hlavy nevím jak se ten container zapisuje teď :)
		$form['reg'] = $this->getRegistracni();

		$form->onSuccess[] = [$this, 'special'];
	}

	public function special($form, $value)
	{
		//volání modelů/obsluhy
	}
Oli
Člen | 1215
+
0
-

Řešil jsem přesně to samé. Použil jsem na to kdyby/events. No a potom mám přihlašovací formulář, kterej to jen pošle dál do listeneru

public function process(Form $form, $values)
{
	// ...
	$this->onSubmit($this, $values->name, $values->email, $values->password);
	// odchytávání chyb, redirect, ...
}

Pokud jsem potřeboval spolu s registrací uživatele zaregistrovat ještě něco dalšího, tak jsem si zaregistroval uživatele pomocí toho řádku výše a potom zaregistroval další objekt. Ideálně by to chtělo ještě hodit do transakce, ale k tomu jsem se zatím nedostal.