Logování všech formulářů jednoduše
- Paradiso
- Člen | 101
Ahoj,potřebujeme logovat formuláře a napadlo mě jednoduché řešení, kdy si udělám u formuláře rozšíření:
class LogForm extends{
...
public function logThisForm(\Model\LogFormRepository $logFormRepository, $adminId, $formName = NULL) {
$url = $_SERVER['REQUEST_URI'];// trošku hack, vím
$this->onSuccess[0] = function(BootstrapForm $form) use ($logFormRepository, $adminId, $url, $formName){
$values = $form->values;
$logFormRepository->logForm($values, $url, $adminId, $formName);
};
}
}
myslel jsem si, že když do toho callbacku dám 0, tak se provede vždy jako první, ale takto mi nefunguje původní odeslání formuláře. Resepktive do logu se to uloží, ale pak už se neodešle formulář. Vím, že je to tou 0, ale jak na to? :/
Dá se nějak udělat pořadí callbacků? (zkoušel jsem googlit, ale moc jsem toho nenašel)
Nebo jaká je bestpractice u logování formulářů? Kdyby toto fungovalo, tak mi to přišlo strašně pohodlné a pro naše účely úplně dostačující.
- Paradiso
- Člen | 101
Jan Endel napsal(a):
Ahoj,
proč to potřebuješ nutně v tomto pořadí? Eventy jsou právě od toho, aby nezáleželo na jejich pořadí.
Případně si to obalit ještě nějakým kusem kódu, co se právě o ty priority bude starat.
Toto je zajímavá poznámka, ale přeci po odeslání formuláře musím udělat redirect, abych zamezil opětovnému odeslání při F5. Nebo se mýlím a dělám to celou dobu špatně? Jinak by mi na pořadí callbacků vůbec nezáleželo, ale jakmile proběhne první callback s redirectem, tak se stopnou ostatní.
- Paradiso
- Člen | 101
CZechBoY napsal(a):
Radši bych logoval až někde v modelové části konkrétní hodnoty než každé odeslání formuláře.
Můžeš se potom spolehnout, že až uděláš api (teď nemusí být v plánu, nebo nikdy) tak by se logovalo přímo z modelové vrstvy kterou použiješ, bez použití formuláře.
Nad tímto jsem také přemýšlel, ale leč to není ideální, vyhovuje nám to v těch formech i s tím, že to budeme muset možná v budoucnu předělat.
- Paradiso
- Člen | 101
voda napsal(a):
Pokud potřebuješ přidat logování před ostatní callbacky, tak použij array_unshift.
Tak vypadá, že toto řešení funguje přesně tak, jak jsem potřeboval, jediné co jsem musel udělat, tak ošetřit:
if($this->onSuccess === NULL){
$this->onSuccess = [];
}
array_unshift($this->onSuccess, function(....
Děkuji moc za pomoc
Editoval Paradiso (15. 5. 2018 12:18)