[Nette/Forms] Vypnout ořezávání mezer u hesla

matronator
Člen | 37
+
+2
-

Zdravím, mám jeden problém ohledně Nette formulářů a validace. Zjistil jsem, že Nette automaticky ořezává mezery z password inputů, což bych potřeboval nějak deaktivovat, protože používám vlastní validátor/formater.

Jde to nějak vypnout? Pročítal jsem API dokumentaci, ale všude jsem našel jenom addRule, addCondition apod., a žádnou funkci pro odstranění pravidla/validace.

Jde to nějak nastavit přímo na tom formulářovém prvku ($form->addPassword), tak aby se vyplo jen to ořezávání a zbytek validace zůstal? Nebo si budu muset vytvořit vlastní prvek?

Editoval matronator (26. 11. 2020 13:02)

matronator
Člen | 37
+
0
-

Tak jsem zkoušel přidat vlastní onValidate, ale tam už ty data taky přijdou ořezané…

Melebius
Člen | 16
+
+1
-

Taky jsem na to narazil. Jednoduché řešení je číst přímo z $_POST, samozřejmě pokud máte v daném místě kódu k dispozici název pole formuláře. A ošetřil bych pak aspoň odřádkování, jak to dělá \Nette\Forms\Helpers::sanitize:

$value = strtr((string)$value, "\r\n", '  ');

Můj případ použití je zadání oddělovače pro explode. Platné hodnoty jsou v tomto případě i mezera, čárka+mezera apod.

m.brecher
Generous Backer | 758
+
-2
-

@matronator

ideální je se s oříznutou mezerou u hesel počítat a neumožnit uživatelům aby si zadali heslo, které mezerou začíná. Pokud ale v projektu máš již hotové uživatelské profily s hesly které obsahují mezeru na začátku, nebo na konci, potom bych zkusil jít cestou:

$form->addPassword(...)   // tohle ne

$form->addText()->setHtmlAttribute('type', 'password')  // tohle by mohlo oříznutí mezery vyřešit

Píšu to z hlavy a nezkoušel jsem to, ale tipnul bych, že to problém vyřeší.

m.brecher
Generous Backer | 758
+
-1
-

@Melebius také mívám nutkání když Nette nedělá, co potřebuji, použít $_POST a napsat si to sám. Kolikrát brouzdání rozsáhlou dokumentací zabere mnohonásobně více času než dva/tři řádky PHP. Jenže vždy když jsem Nette obešel pomocí $_POST, nakonec jsem se ocitnul ve slepé uličce nekompatibility se zbytek Nette aplikace. Takže $_POST z principu nedoporučuji, pouze zcela vyjímečně.