Ze dvou formulářů jeden (tichá registrace)?
- Džůny
- Člen | 19
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
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
Ř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.