Vlastní action pro overload tpl

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

Zdravím,

zaujala mě jedna věc. Refactoruji svůj kód, kde jsem definoval action formuláře až v šabloně, což fungovalo korektně, ale moc se mi to nelíbilo a musel jsem zbytečně definovat defaultní action, když do šablony hodnotu pro tu action variable nepošlu.

Tak sem si definoval action s podmínkou ve form factory. Vyplňovala se, zdálo se, že je to změna k lepšímu, avšak formulář se po odeslání nezpracoval. Vůbec se nevykonal callback onSuccess.

Do té action si přidávám identifikaci domény, formulář se bude vkládat pomocí iframe na více webů a já jej poté upravuji podle toho identifikátoru, především layout, šablonu.

Napadá vás, proč se validní formulář s tímto vlastním action, které zadávám ve factory, nezpracuje?

díky

Editoval Landsman (5. 9. 2016 14:20)

Michal Hlávka
Člen | 190
+
0
-

Odesíláš formulář fakt na správnou adresu? Obsahuje formulář klíč do, s obsahem, jaká akce se má vykonat?

Landsman
Člen | 152
+
0
-

Ano, adresa je 100% správná.

O tom „do“ jsem přemýšlel, ale je tam opravdu nutný? Já to chci zpracovávat úplně stejným způsobem, jako kdyby tam ten parametr nebyl. Není to ajax.

CZechBoY
Člen | 3608
+
+2
-

Jak stejným způsobem? Když tam není DO parametr tak formulář neví že byl odeslanej… resp. nevyvolaj se callbacky.

Editoval CZechBoY (5. 9. 2016 15:20)

Landsman
Člen | 152
+
0
-

CZechBoY napsal(a):

Jak stejným způsobem? Když tam není DO parametr tak formulář neví že byl odeslanej… resp. nevyvolaj se callbacky.

Proč? Já formulář nezpracovávám přes handle.
Ten parametr není „?do=xx“, ale custom „?ref=xx“.

CZechBoY
Člen | 3608
+
0
-

Formulář je typu post nebo get? Pokud je post tak je do parametr posílán POSTem.

Můžeš nadhodit nějakej minimální kod k vyvolání chyby?

Landsman
Člen | 152
+
0
-

Jde o POST, ten parametr načítám fakt jen pro nesouvisející věci se zpracováním.

Přemýšlím jak tu ukázku osekat, je to celkem roztahané vč. práce se session a podobně, tak abych to nezamotal ještě více.

Chtěl jsem se hlavně zeptat na nějakou obecnou práci s tím action. Proč se liší zpracování, když action změním přímo při vytváření formuláře (nefunguje) vs. až při ručním renderu zápisem:

{form reserveForm, action => $formAction, class => 'form-horizontal', target => '_top'}

Btw. máš pravdu ani jsem si toho hidden inputu s „do“ nevšiml! Vypadá to, že se automaticky nepřidává, když udělám přes

$form->setAction($action);

Pokud jej přidám ručně, tedy:

if(null == $formSettings->isDefault)
{
    $form->setAction($action);
    $form->addHidden('do')
        ->setDefaultValue('reserveForm-submit');
}

Tak to šlape.
Ale je to takové neintuitivní.

@CZechBoY Proč tomu tak je? Očekává, že bude zpracovaný handlerem?

Editoval Landsman (5. 9. 2016 19:08)

CZechBoY
Člen | 3608
+
0
-

Jj posle se signal oznamujici tomu formu ze byl odeslanej form a ma si vyzvednout hodnoty v postu.
Je to hlavne kvuli podpore vice formularu na jedne strance/presenteru/akci… nebo taky ten formular muze byt zanoreny v komponentovem strome kdovikde a komponenty v Nette se vytvari az kdyz jsou potreba.. takze bez signalu bys nevedeljake komponenty vytvorit.

Jinak proc se ten input neprida nevim.

Landsman
Člen | 152
+
0
-

@CZechBoY Rozumím, to mi dává smysl, chytré! Děkuji za vysvětlení.
Ještě by mě zajímalo, proč se nepřidá automaticky jako hidden, při setAction().

Kdo ví? :)

Landsman
Člen | 152
+
0
-

@CZechBoY Ještě jsem narazil na jednu věc, kdy se to v případě toho parametru chová jinak. Když chci použít:

$this->presenter->link(":Consultation:Page: 2")

tak vrátí:

Cannot read an undeclared property App\Forms\ReserveFormFactory::$presenter

Pokud v URl parametr „?ref=x“ nemám, odkaz se vyrenderuje správně.