Zjisteni signalu (odeslaneho formulare) v komponente
- saimons
- Člen | 293
Chtel bych se zeptat, zda je mozne nejak v komponente zjistit odeslani formulare na webu. Priklad: na webu zobrazuji formula, komponenta zobrazuje urcity text. Po odeslani formulare na strance bych chtel nejak v komponente zachytit, ze se to stalo, abych napriklad mohl upravit naka data v DB a vypsat text. Nechci zasahovat do odesilaciho formulare ci zpracovavajici funkce, aby byla komponenta oddelena od aplikace.
Nevim jestli je to vubec mozne nak zjistit, protoze chapu ze po provedeni zpracovani signalu ty data o signalu uz neexistuji. Dalo by se to nak resit bez zasahu do funkce na zpracovani formulare?
Editoval saimons (25. 10. 2012 16:57)
- saimons
- Člen | 293
Pokusim se to jeste trochu zkonkretizovat: Zobrazuiji uzivatelum tutorial pomoci komponenty a potrebuji nejak zjistit jestli uzivatel udelal to co mel, abych mohl zobrazit dalsi krok tutorialu. Potreboval bych nejak zjistit, ze odeslal konkretni formular (zjistit v komponente), nezajima me co odeslali protoze o to se postara validace, jen to ze byl odeslan. Dalo by se to zjistovat na urovni DB, ale to mi nepripada idelani, protoze kdyz zmenim strukturu, tak budu muset myslet na to, ze musim neco zmenit i v komponente.
- saimons
- Člen | 293
Takhle mam tu strukturu, nevim jak jednoduseji to udelat abych v te komponente mohl zpracovavat odeslany formular. Pokud je jeste jina cesta, rad se poucim. Ale stejne mi to pripada takove, ze ta komponenta neni oddelna od ostatnich aplikaci.
<?php
namespace AkceModule;
class AkcePresenter extends SecuredPresenter {
/**
* Zverejnit akci
* @return \Nette\Application\UI\Form
*/
protected function createComponentJuniorsForm() {
$form = new UI\Form;
$form->addSubmit('save', 'Zveřejnit');
$tutorial = new \Components\CTutorialControl($this->context);
$form->onSuccess[] = callback($tutorial, 'testSubmitted');
$form->onSuccess[] = callback($this, 'zverejnitFormSubmitted');
return $form;
}
namespace Components;
class CTutorialControl extends UI\Control {
...
public function testSubmitted() {
}
}
?>
Editoval saimons (29. 10. 2012 18:16)
- saimons
- Člen | 293
Je, protoze ten formular je klasickej formular v modulu, kde jich je dalsich x. A ta komponenta ma za ukol provest nove uzivatele vsemi moznostmi, co muzou v systemu delat. tato komponenta tutorial by mela byt co nejmene zavisla na ostatnim kodu (nejlepe vubec), aby se pri zmenach v modulech nemuselo myslet na tutorial.
- vvoody
- Člen | 910
Komponentu inštancuje vždy len jej továrnička, všade inde ju získame pomocou ArrayAccess alebo metódou getComponent z rodičovskej komponenty (presenteru).
protected function createComponentJuniorsForm() {
$form = new UI\Form;
$form->addSubmit('save', 'Zveřejnit');
$tutorial = $this['tutorial'];
$form->onSuccess[] = callback($tutorial, 'testSubmitted');
$form->onSuccess[] = callback($this, 'zverejnitFormSubmitted');
return $form;
}