SlideShare a Scribd company logo
1 of 23
Download to read offline
Jednoduché rozšíření pro komplexní validace v Nette formulářích
Petr Klobás
pd/forms
FB facebook.com/peckadesign TW @peckadesignpd/forms Petr Klobás
O čem bude řeč
FB facebook.com/peckadesign TW @peckadesignpd/forms Petr Klobás
• terminologie formulářových validací
• motivace vzniku pd/forms
• podpora Nette pro custom validace
• pd/forms
• PdFormsRuleOptions
• Live validace, měkká validace a validační kontext
• Měkká validace pomocí Nette pravidel
• Je libo AJAX?
• Závislé inputy a manipulace s formulářem po validaci
• pár slov závěrem
Terminologie formulářových validací
FB facebook.com/peckadesign TW @peckadesignpd/forms Petr Klobás
• “Standardní” validace: validace, která je zpracována na straně
serveru a může být zpracována i na straně klienta
• Live validace: bezprostřední validace formuláře na straně klienta
(v prohlížeči) při interakci s formulářem
• Měkká validace: live validace, která upozorní uživatele na problém
ve formuláři, ale umožní odeslání formuláře (není kontrolována na
straně serveru)
• AJAX validace: live validace, která pro výsledek validace volá
asynchronně zpracování na backendu
Proč pd/forms?
FB facebook.com/peckadesign TW @peckadesignpd/forms Petr Klobás
Vznik samostatné knihovny pd/forms:
1. Zachování původní funkcionality měkkých a ajaxových validací
po aktualizaci Nette
2. Vylepšení / usnadnění použitelnosti v aplikaci
3. Snazší údržba, více verzí, rozšiřitelnost, dokumentace, testy
Základní myšlenka:
“Možnost přidat komplexní validaci na backendu s minimální nutností
psát frontendovou obsluhu.”
FB facebook.com/peckadesign TW @peckadesignpd/forms Petr Klobás
FB facebook.com/peckadesign TW @peckadesignpd/forms Petr Klobás
FB facebook.com/peckadesign TW @peckadesignpd/forms Petr Klobás
Podpora Nette pro custom validace
FB facebook.com/peckadesign TW @peckadesignpd/forms Petr Klobás
• Nette nabízí podporu pro vytváření vlastních validačních pravidel,
pokud vestavěná pravidla nestačí
• BaseControl::addRule(MyRules::RULE, ‘_msg_’, $args);
• https://pla.nette.org/cs/vlastni-validacni-pravidla
• Argumenty addRule() => data-nette-rules
• poslední parametr addRule není typovaný, čehož se dá s výhodou
využít
PdFormsRuleOptions
FB facebook.com/peckadesign TW @peckadesignpd/forms Petr Klobás
• jednoduchý value object, který je serializovatelný do JSONu
• v balíčku k dispozici továrna jako služba pro instanciaci
• nese všechny potřebné informace pro zpracování validace na
frontendu i backendu
Live validace, měkká validace a validační kontext
FB facebook.com/peckadesign TW @peckadesignpd/forms Petr Klobás
• (nejen) live validaci zajišťuje na frontendu javascriptová obsluha
pdForms.js
• vzhledem k tomu, že máme koncept přidávání komplexních
validací řízen z backendu, musíme tam vyřešit obsluhu pravidla
• tu vyřešíme poměrně jednoduše pomocí RuleOptions objektu
Live validace, měkká validace a validační kontext
FB facebook.com/peckadesign TW @peckadesignpd/forms Petr Klobás
• backend máme vyřešen, zbývá vytvořit validátor pro frontend,
o který nám jde u měkké validace především
• PdFormsRules::phone => PdFormsRules_phone
• hotovo 🤝
Live validace, měkká validace a validační kontext
FB facebook.com/peckadesign TW @peckadesignpd/forms Petr Klobás
• může se objevit potřeba dodat validátoru sadu dat, proti kterým se
bude hodnota formulářového pole validovat
• taková sada může být v čase proměnná, takže ji nelze hard-
kodóvat do validátoru (na BE řešitelné, ale co FE?)
• tento typ dat předáme pravidlu jako validační kontext
Měkká validace Nette pravidel
FB facebook.com/peckadesign TW @peckadesignpd/forms Petr Klobás
• Nette obsahuje sadu obecných validátorů, které ovšem nelze
jednoduše použít při měkké validaci, což nám přišlo škoda
• PdFormsRules::NETTE_RULE_PROXY + createNetteOptional()
• netřeba řešit frontendovou obsluhu, funguje out of the box
Je libo AJAX?
FB facebook.com/peckadesign TW @peckadesignpd/forms Petr Klobás
• asynchronní volání pro live validaci vstupu
• kdy zapojit?
• validace je příliš komplikovaná pro zpracování na frontendu
• validace je závislá na externí službě
• kombinace obojího
• pd/forms nabízí podporu jak na backendu tak frontendu
• Rules::AJAX + RuleOptions::enableAjax($endpoint,
$validationService)
• PdFormsValidationServiceInterface
• PdFormsValidationControllerInterface
• PdFormsAbstractValidationController
Je libo AJAX?
FB facebook.com/peckadesign TW @peckadesignpd/forms Petr Klobás
• Příklad - povinná validace lékové karty na lékárenském eshopu
• vytvoření pravidla
• endpoint + validationService
• více validačních stavů
Je libo AJAX?
FB facebook.com/peckadesign TW @peckadesignpd/forms Petr Klobás
• ValidationServiceInterface + ValidationResult
Je libo AJAX?
FB facebook.com/peckadesign TW @peckadesignpd/forms Petr Klobás
• ValidationControllerInterface
Je libo AJAX?
FB facebook.com/peckadesign TW @peckadesignpd/forms Petr Klobás
• AbstractValidationController
• pomocí tohoto kontroleru jsme pokryly všechny implementované
ajaxové validace
Závislé inputy a manipulace s formulářem po validaci
FB facebook.com/peckadesign TW @peckadesignpd/forms Petr Klobás
• v našem kontextu při AJAXu
• rozlišujeme dva typy validace, která pracuje s více inputy
• na vstupu: validace závislá na hodnotách více inputů ve
formuláři; např. zadání správné kombinace město + psč
• na výstupu: validace vrací výsledek, který chceme doplnit do
formuláře nebo změnit nějaký prvek (select, checkbox); např.
validace DIČ firmy a doplnění jména firmy a IČ do formuláře
• pd/forms pro tyto situace poskytuje mechanismus závislých inputů
FB facebook.com/peckadesign TW @peckadesignpd/forms Petr Klobás
• Příklad - validace DIČ firmy a doplnění jména firmy a IČ do
formuláře
Závislé inputy a manipulace s formulářem po validaci
FB facebook.com/peckadesign TW @peckadesignpd/forms Petr Klobás
• ValidationServiceInterface + ValidationResult
Závislé inputy a manipulace s formulářem po validaci
Závěrem
FB facebook.com/peckadesign TW @peckadesignpd/forms Petr Klobás
• https://github.com/peckadesign/pdforms
• knihovna je volně k použití, publikovaná na packagistovi => composer
• obsahuje pár validátorů, které se můžou hodit v českém rybníčku (telefon,
vstup obsahuje číslo (ulice), IČO firmy)
• udržujeme verzi pro Nette 2.3 a 2.4 (3.0 ve výrobě)
• má dokumentaci i testy (zatím jen PHP), chceme doplnit JS testy
• knihovna má obsáhlejší JS obsluhu, díky @zipper
FB facebook.com/peckadesign TW @peckadesignpd/forms Petr Klobás
Díky za pozornost
E-mail petr.klobas@peckadesign.cz Twitter @klobinoid LinkdeIn /petrklobas

More Related Content

Similar to Péhápkaři v Pecce: pd/forms – Petr Klobás – 16. 10. 2019

20091202 Aplikované nástroje SW inženýra
20091202 Aplikované nástroje SW inženýra20091202 Aplikované nástroje SW inženýra
20091202 Aplikované nástroje SW inženýra
Jiří Mareš
 

Similar to Péhápkaři v Pecce: pd/forms – Petr Klobás – 16. 10. 2019 (20)

ASP.NET 3.5 / futures
ASP.NET 3.5 / futuresASP.NET 3.5 / futures
ASP.NET 3.5 / futures
 
Semináře M-Files: Konec hledání řešení pro správu firemních dat
Semináře M-Files: Konec hledání řešení pro správu firemních datSemináře M-Files: Konec hledání řešení pro správu firemních dat
Semináře M-Files: Konec hledání řešení pro správu firemních dat
 
Webová prezentace - case study - Ibis interiér
Webová prezentace - case study - Ibis interiérWebová prezentace - case study - Ibis interiér
Webová prezentace - case study - Ibis interiér
 
Webová prezentace - case study - Squaris Consultants
Webová prezentace - case study - Squaris ConsultantsWebová prezentace - case study - Squaris Consultants
Webová prezentace - case study - Squaris Consultants
 
KeePass: Základy, pokročilé využití a KeePass Enterprise (čtvrtek, 14.4.2022)
KeePass: Základy, pokročilé využití a KeePass Enterprise (čtvrtek, 14.4.2022)KeePass: Základy, pokročilé využití a KeePass Enterprise (čtvrtek, 14.4.2022)
KeePass: Základy, pokročilé využití a KeePass Enterprise (čtvrtek, 14.4.2022)
 
ITSM - Jira Service Desk a spřátelené aplikace z rodiny Atlassian
ITSM - Jira Service Desk a spřátelené aplikace z rodiny AtlassianITSM - Jira Service Desk a spřátelené aplikace z rodiny Atlassian
ITSM - Jira Service Desk a spřátelené aplikace z rodiny Atlassian
 
Google Tag Manager a analytika ve WordPress
Google Tag Manager a analytika ve WordPressGoogle Tag Manager a analytika ve WordPress
Google Tag Manager a analytika ve WordPress
 
Jak komunikovat, aby to správně měřilo (MeasureCamp Prague 2015)
Jak komunikovat, aby to správně měřilo (MeasureCamp Prague 2015)Jak komunikovat, aby to správně měřilo (MeasureCamp Prague 2015)
Jak komunikovat, aby to správně měřilo (MeasureCamp Prague 2015)
 
Vyhledávače zboží 2015: Sklik
Vyhledávače zboží 2015: SklikVyhledávače zboží 2015: Sklik
Vyhledávače zboží 2015: Sklik
 
20091202 Aplikované nástroje SW inženýra
20091202 Aplikované nástroje SW inženýra20091202 Aplikované nástroje SW inženýra
20091202 Aplikované nástroje SW inženýra
 
WAS 2.0 (2011)
WAS 2.0 (2011)WAS 2.0 (2011)
WAS 2.0 (2011)
 
INPTP Rekapitulace
INPTP Rekapitulace INPTP Rekapitulace
INPTP Rekapitulace
 
Magento Meeting 2009 CZ
Magento Meeting 2009 CZMagento Meeting 2009 CZ
Magento Meeting 2009 CZ
 
Webinář: Ochrana dat ve virtuálním prostředí pomocí nástroje Veeam Backup & R...
Webinář: Ochrana dat ve virtuálním prostředí pomocí nástroje Veeam Backup & R...Webinář: Ochrana dat ve virtuálním prostředí pomocí nástroje Veeam Backup & R...
Webinář: Ochrana dat ve virtuálním prostředí pomocí nástroje Veeam Backup & R...
 
Webinář: Ochrana dat ve virtuálním prostředí pomocí nástroje Veeam B&R / 3.10...
Webinář: Ochrana dat ve virtuálním prostředí pomocí nástroje Veeam B&R / 3.10...Webinář: Ochrana dat ve virtuálním prostředí pomocí nástroje Veeam B&R / 3.10...
Webinář: Ochrana dat ve virtuálním prostředí pomocí nástroje Veeam B&R / 3.10...
 
Nejčastější chyby při inzerci v Skliku
Nejčastější chyby při inzerci v SklikuNejčastější chyby při inzerci v Skliku
Nejčastější chyby při inzerci v Skliku
 
Woocommerce úpravy funkčnosti a ovlivňování dat
Woocommerce   úpravy funkčnosti a ovlivňování datWoocommerce   úpravy funkčnosti a ovlivňování dat
Woocommerce úpravy funkčnosti a ovlivňování dat
 
KeePass: Využití ve firmách a KeePass Enterprise (čtvrtek, 28.7.2022)
KeePass: Využití ve firmách a KeePass Enterprise (čtvrtek, 28.7.2022)KeePass: Využití ve firmách a KeePass Enterprise (čtvrtek, 28.7.2022)
KeePass: Využití ve firmách a KeePass Enterprise (čtvrtek, 28.7.2022)
 
Michal Majer / I testování může být zábava
Michal Majer / I testování může být zábavaMichal Majer / I testování může být zábava
Michal Majer / I testování může být zábava
 
Co sledovat a jak měřit u mobilního webu
Co sledovat a jak měřit u mobilního webuCo sledovat a jak měřit u mobilního webu
Co sledovat a jak měřit u mobilního webu
 

More from PeckaDesign.cz

More from PeckaDesign.cz (20)

Péhápkaři v Pecce: Naše cesta k read-modelu – Vojtěch Buba –18. 5. 2022
Péhápkaři v Pecce: Naše cesta k read-modelu – Vojtěch Buba –18. 5. 2022Péhápkaři v Pecce: Naše cesta k read-modelu – Vojtěch Buba –18. 5. 2022
Péhápkaři v Pecce: Naše cesta k read-modelu – Vojtěch Buba –18. 5. 2022
 
Péhápkaři v Pecce: Jak zrefaktorovat letitou aplikaci a zároveň začít na zele...
Péhápkaři v Pecce: Jak zrefaktorovat letitou aplikaci a zároveň začít na zele...Péhápkaři v Pecce: Jak zrefaktorovat letitou aplikaci a zároveň začít na zele...
Péhápkaři v Pecce: Jak zrefaktorovat letitou aplikaci a zároveň začít na zele...
 
WebTop100 Case study MEGAPIXEL – Redesign spuštěný proti pravidlům
WebTop100 Case study MEGAPIXEL – Redesign spuštěný proti pravidlůmWebTop100 Case study MEGAPIXEL – Redesign spuštěný proti pravidlům
WebTop100 Case study MEGAPIXEL – Redesign spuštěný proti pravidlům
 
Péhápkaři v Pecce: Sbohem PeckaCI, vítej Github Actions – Jakub Englický –27....
Péhápkaři v Pecce: Sbohem PeckaCI, vítej Github Actions – Jakub Englický –27....Péhápkaři v Pecce: Sbohem PeckaCI, vítej Github Actions – Jakub Englický –27....
Péhápkaři v Pecce: Sbohem PeckaCI, vítej Github Actions – Jakub Englický –27....
 
Péhápkaři v Pecce: Podpora PHP8 v Kdyby/Redis a Kdyby/RabbitMQ – Václav Čevel...
Péhápkaři v Pecce: Podpora PHP8 v Kdyby/Redis a Kdyby/RabbitMQ – Václav Čevel...Péhápkaři v Pecce: Podpora PHP8 v Kdyby/Redis a Kdyby/RabbitMQ – Václav Čevel...
Péhápkaři v Pecce: Podpora PHP8 v Kdyby/Redis a Kdyby/RabbitMQ – Václav Čevel...
 
Péhápkaři v Pecce: Půl roku na cestách jako digitální nomád – Jan Kadeřábek –...
Péhápkaři v Pecce: Půl roku na cestách jako digitální nomád – Jan Kadeřábek –...Péhápkaři v Pecce: Půl roku na cestách jako digitální nomád – Jan Kadeřábek –...
Péhápkaři v Pecce: Půl roku na cestách jako digitální nomád – Jan Kadeřábek –...
 
Péhápkaři v Pecce: Vývoj vlastního 'ORM' – Václav Čevela – 20. 11. 2019
Péhápkaři v Pecce: Vývoj vlastního 'ORM' – Václav Čevela – 20. 11. 2019Péhápkaři v Pecce: Vývoj vlastního 'ORM' – Václav Čevela – 20. 11. 2019
Péhápkaři v Pecce: Vývoj vlastního 'ORM' – Václav Čevela – 20. 11. 2019
 
Tvorba nových vstupních stránek z pohledu SEO
Tvorba nových vstupních stránek z pohledu SEO Tvorba nových vstupních stránek z pohledu SEO
Tvorba nových vstupních stránek z pohledu SEO
 
Péhápkaři v Pecce: Za hranicemi DateTime – Jiří Pudil – 16. 10. 2019
Péhápkaři v Pecce: Za hranicemi DateTime – Jiří Pudil – 16. 10. 2019Péhápkaři v Pecce: Za hranicemi DateTime – Jiří Pudil – 16. 10. 2019
Péhápkaři v Pecce: Za hranicemi DateTime – Jiří Pudil – 16. 10. 2019
 
Péhápkaři v Pecce: Úvod do monitoringu – Tomáš Kozák – 16. 10. 2019
Péhápkaři v Pecce: Úvod do monitoringu – Tomáš Kozák – 16. 10. 2019Péhápkaři v Pecce: Úvod do monitoringu – Tomáš Kozák – 16. 10. 2019
Péhápkaři v Pecce: Úvod do monitoringu – Tomáš Kozák – 16. 10. 2019
 
Asynchronní programování
Asynchronní programováníAsynchronní programování
Asynchronní programování
 
ElasticSearch Dump
ElasticSearch DumpElasticSearch Dump
ElasticSearch Dump
 
Pokročilá validace síly hesla
Pokročilá validace síly heslaPokročilá validace síly hesla
Pokročilá validace síly hesla
 
Péhápkaři v Pecce: Každodenní problémy s implementací Facebook Api – Marek Hu...
Péhápkaři v Pecce: Každodenní problémy s implementací Facebook Api – Marek Hu...Péhápkaři v Pecce: Každodenní problémy s implementací Facebook Api – Marek Hu...
Péhápkaři v Pecce: Každodenní problémy s implementací Facebook Api – Marek Hu...
 
Péhápkaři v Pecce: Čtyři hlavní příčiny dysfunkčních návyků v týmu – Michal A...
Péhápkaři v Pecce: Čtyři hlavní příčiny dysfunkčních návyků v týmu – Michal A...Péhápkaři v Pecce: Čtyři hlavní příčiny dysfunkčních návyků v týmu – Michal A...
Péhápkaři v Pecce: Čtyři hlavní příčiny dysfunkčních návyků v týmu – Michal A...
 
Péhápkaři v Pecce: Jak si lokálně spustit Travis CI Build – Jakub Englický – ...
Péhápkaři v Pecce: Jak si lokálně spustit Travis CI Build – Jakub Englický – ...Péhápkaři v Pecce: Jak si lokálně spustit Travis CI Build – Jakub Englický – ...
Péhápkaři v Pecce: Jak si lokálně spustit Travis CI Build – Jakub Englický – ...
 
Péhápkaři v Pecce: Jak jsme neposlali pull request do PHP – Milan Pála – 17. ...
Péhápkaři v Pecce: Jak jsme neposlali pull request do PHP – Milan Pála – 17. ...Péhápkaři v Pecce: Jak jsme neposlali pull request do PHP – Milan Pála – 17. ...
Péhápkaři v Pecce: Jak jsme neposlali pull request do PHP – Milan Pála – 17. ...
 
Péhápkaři v Pecce: Zend Expressive: PSR framework který vás dostane – Jan Kad...
Péhápkaři v Pecce: Zend Expressive: PSR framework který vás dostane – Jan Kad...Péhápkaři v Pecce: Zend Expressive: PSR framework který vás dostane – Jan Kad...
Péhápkaři v Pecce: Zend Expressive: PSR framework který vás dostane – Jan Kad...
 
Péhápkaři v Pecce: Jak na bezpečnostní hlavičky – Marek Humpolík – 23. 1. 2019
Péhápkaři v Pecce: Jak na bezpečnostní hlavičky – Marek Humpolík – 23. 1. 2019Péhápkaři v Pecce: Jak na bezpečnostní hlavičky – Marek Humpolík – 23. 1. 2019
Péhápkaři v Pecce: Jak na bezpečnostní hlavičky – Marek Humpolík – 23. 1. 2019
 
PeckaAcademy - Zbožové srovnávače od A-Z - Petra Mariánková
PeckaAcademy - Zbožové srovnávače od A-Z - Petra MariánkováPeckaAcademy - Zbožové srovnávače od A-Z - Petra Mariánková
PeckaAcademy - Zbožové srovnávače od A-Z - Petra Mariánková
 

Péhápkaři v Pecce: pd/forms – Petr Klobás – 16. 10. 2019

  • 1. Jednoduché rozšíření pro komplexní validace v Nette formulářích Petr Klobás pd/forms FB facebook.com/peckadesign TW @peckadesignpd/forms Petr Klobás
  • 2. O čem bude řeč FB facebook.com/peckadesign TW @peckadesignpd/forms Petr Klobás • terminologie formulářových validací • motivace vzniku pd/forms • podpora Nette pro custom validace • pd/forms • PdFormsRuleOptions • Live validace, měkká validace a validační kontext • Měkká validace pomocí Nette pravidel • Je libo AJAX? • Závislé inputy a manipulace s formulářem po validaci • pár slov závěrem
  • 3. Terminologie formulářových validací FB facebook.com/peckadesign TW @peckadesignpd/forms Petr Klobás • “Standardní” validace: validace, která je zpracována na straně serveru a může být zpracována i na straně klienta • Live validace: bezprostřední validace formuláře na straně klienta (v prohlížeči) při interakci s formulářem • Měkká validace: live validace, která upozorní uživatele na problém ve formuláři, ale umožní odeslání formuláře (není kontrolována na straně serveru) • AJAX validace: live validace, která pro výsledek validace volá asynchronně zpracování na backendu
  • 4. Proč pd/forms? FB facebook.com/peckadesign TW @peckadesignpd/forms Petr Klobás Vznik samostatné knihovny pd/forms: 1. Zachování původní funkcionality měkkých a ajaxových validací po aktualizaci Nette 2. Vylepšení / usnadnění použitelnosti v aplikaci 3. Snazší údržba, více verzí, rozšiřitelnost, dokumentace, testy Základní myšlenka: “Možnost přidat komplexní validaci na backendu s minimální nutností psát frontendovou obsluhu.”
  • 5. FB facebook.com/peckadesign TW @peckadesignpd/forms Petr Klobás
  • 6. FB facebook.com/peckadesign TW @peckadesignpd/forms Petr Klobás
  • 7. FB facebook.com/peckadesign TW @peckadesignpd/forms Petr Klobás
  • 8. Podpora Nette pro custom validace FB facebook.com/peckadesign TW @peckadesignpd/forms Petr Klobás • Nette nabízí podporu pro vytváření vlastních validačních pravidel, pokud vestavěná pravidla nestačí • BaseControl::addRule(MyRules::RULE, ‘_msg_’, $args); • https://pla.nette.org/cs/vlastni-validacni-pravidla • Argumenty addRule() => data-nette-rules • poslední parametr addRule není typovaný, čehož se dá s výhodou využít
  • 9. PdFormsRuleOptions FB facebook.com/peckadesign TW @peckadesignpd/forms Petr Klobás • jednoduchý value object, který je serializovatelný do JSONu • v balíčku k dispozici továrna jako služba pro instanciaci • nese všechny potřebné informace pro zpracování validace na frontendu i backendu
  • 10. Live validace, měkká validace a validační kontext FB facebook.com/peckadesign TW @peckadesignpd/forms Petr Klobás • (nejen) live validaci zajišťuje na frontendu javascriptová obsluha pdForms.js • vzhledem k tomu, že máme koncept přidávání komplexních validací řízen z backendu, musíme tam vyřešit obsluhu pravidla • tu vyřešíme poměrně jednoduše pomocí RuleOptions objektu
  • 11. Live validace, měkká validace a validační kontext FB facebook.com/peckadesign TW @peckadesignpd/forms Petr Klobás • backend máme vyřešen, zbývá vytvořit validátor pro frontend, o který nám jde u měkké validace především • PdFormsRules::phone => PdFormsRules_phone • hotovo 🤝
  • 12. Live validace, měkká validace a validační kontext FB facebook.com/peckadesign TW @peckadesignpd/forms Petr Klobás • může se objevit potřeba dodat validátoru sadu dat, proti kterým se bude hodnota formulářového pole validovat • taková sada může být v čase proměnná, takže ji nelze hard- kodóvat do validátoru (na BE řešitelné, ale co FE?) • tento typ dat předáme pravidlu jako validační kontext
  • 13. Měkká validace Nette pravidel FB facebook.com/peckadesign TW @peckadesignpd/forms Petr Klobás • Nette obsahuje sadu obecných validátorů, které ovšem nelze jednoduše použít při měkké validaci, což nám přišlo škoda • PdFormsRules::NETTE_RULE_PROXY + createNetteOptional() • netřeba řešit frontendovou obsluhu, funguje out of the box
  • 14. Je libo AJAX? FB facebook.com/peckadesign TW @peckadesignpd/forms Petr Klobás • asynchronní volání pro live validaci vstupu • kdy zapojit? • validace je příliš komplikovaná pro zpracování na frontendu • validace je závislá na externí službě • kombinace obojího • pd/forms nabízí podporu jak na backendu tak frontendu • Rules::AJAX + RuleOptions::enableAjax($endpoint, $validationService) • PdFormsValidationServiceInterface • PdFormsValidationControllerInterface • PdFormsAbstractValidationController
  • 15. Je libo AJAX? FB facebook.com/peckadesign TW @peckadesignpd/forms Petr Klobás • Příklad - povinná validace lékové karty na lékárenském eshopu • vytvoření pravidla • endpoint + validationService • více validačních stavů
  • 16. Je libo AJAX? FB facebook.com/peckadesign TW @peckadesignpd/forms Petr Klobás • ValidationServiceInterface + ValidationResult
  • 17. Je libo AJAX? FB facebook.com/peckadesign TW @peckadesignpd/forms Petr Klobás • ValidationControllerInterface
  • 18. Je libo AJAX? FB facebook.com/peckadesign TW @peckadesignpd/forms Petr Klobás • AbstractValidationController • pomocí tohoto kontroleru jsme pokryly všechny implementované ajaxové validace
  • 19. Závislé inputy a manipulace s formulářem po validaci FB facebook.com/peckadesign TW @peckadesignpd/forms Petr Klobás • v našem kontextu při AJAXu • rozlišujeme dva typy validace, která pracuje s více inputy • na vstupu: validace závislá na hodnotách více inputů ve formuláři; např. zadání správné kombinace město + psč • na výstupu: validace vrací výsledek, který chceme doplnit do formuláře nebo změnit nějaký prvek (select, checkbox); např. validace DIČ firmy a doplnění jména firmy a IČ do formuláře • pd/forms pro tyto situace poskytuje mechanismus závislých inputů
  • 20. FB facebook.com/peckadesign TW @peckadesignpd/forms Petr Klobás • Příklad - validace DIČ firmy a doplnění jména firmy a IČ do formuláře Závislé inputy a manipulace s formulářem po validaci
  • 21. FB facebook.com/peckadesign TW @peckadesignpd/forms Petr Klobás • ValidationServiceInterface + ValidationResult Závislé inputy a manipulace s formulářem po validaci
  • 22. Závěrem FB facebook.com/peckadesign TW @peckadesignpd/forms Petr Klobás • https://github.com/peckadesign/pdforms • knihovna je volně k použití, publikovaná na packagistovi => composer • obsahuje pár validátorů, které se můžou hodit v českém rybníčku (telefon, vstup obsahuje číslo (ulice), IČO firmy) • udržujeme verzi pro Nette 2.3 a 2.4 (3.0 ve výrobě) • má dokumentaci i testy (zatím jen PHP), chceme doplnit JS testy • knihovna má obsáhlejší JS obsluhu, díky @zipper
  • 23. FB facebook.com/peckadesign TW @peckadesignpd/forms Petr Klobás Díky za pozornost E-mail petr.klobas@peckadesign.cz Twitter @klobinoid LinkdeIn /petrklobas