Skip to content

Ajax login fix#40

Open
filipjakub wants to merge 1 commit intoChrynn:38-feature-event-moudle-adminfrom
filipjakub:38-feature-event-moudle-admin
Open

Ajax login fix#40
filipjakub wants to merge 1 commit intoChrynn:38-feature-event-moudle-adminfrom
filipjakub:38-feature-event-moudle-admin

Conversation

@filipjakub
Copy link
Copy Markdown

Ahoj, chyběli ti v zásadě 2 věci, nette.ajax a netteForms.
nette.ajax zajaišťuje celkově Ajax komunikaci ve spolupráci s redrawControl, umí to samozřejmě mnohem více věcí a netteForms, což se zaměřuje konkrétně na ajax formuláře. Obě věci samozřejmě potřebují jQuery.

Potom akorát chyběl submit button v Login.php, bez toho netteForms nefunguje, a fungovalo by to klasciky s refreshem.

Ještě takové best practice tipy:

  • Login.php a komponenty celkově by si měl pojmenovávat například LoginControl, aby bylo na první pohled na název jasné, že se jedná o komponentu.
  • V login.php bych nepoužíval název funkce handleLogin. handle se v nette používá pro signály a může to pro někoho být matoucí.

@Chrynn Chrynn force-pushed the 38-feature-event-moudle-admin branch 3 times, most recently from fccf624 to 39ef00a Compare December 10, 2023 18:19
@Chrynn
Copy link
Copy Markdown
Owner

Chrynn commented Dec 10, 2023

@filipjakub Dobry den, dekuji mockrat! Opravy jsem aplikoval do sve vetve.

Vsiml jsem si, ze jste pridal script na Nette forms, coz zapne Nette validaci. Ja jsem to vetsinou resil vlasnim zpusobem (vlastnima validacema - cimz se vytvari kolo), jelikoz se mi nikdy nepodarilo to napojit na formular, aby se ta hlaska zobrazila primo u inputu, ke kteremu patri. Vyskakujici nenastylovane okno neni moc UX friendly dle me. Netusil byste jak toho docilit?

Zkousel jsem jeste v 5db6029 pridat ajaxove nacitani paginatoru, ale nejspise to asi nefunguje tak, jak si to predstavuji. Netusil byste co je tam spatne?

Jeste jednou moc dekuji.

@filipjakub
Copy link
Copy Markdown
Author

Errory přimo k inputům se dělají například takhle:
V latte k tomu inputu (nebo samozřejmě kamkoliv jinam) můžeme udělat pomocí {inputError name} značky, nějak takhle:
image

V rámci vyhodnocení formuláře v presenter/komponentě pak klasicky $form->addError(), avšak ne takto na formulář, ale na přímo na prvek:
image

Takto to jde pro každý element formuláře. "Globální" chyby formuláře ($form->addError) se pak vypíšou přes <li n:foreach="$form->getOwnErrors() as $error">{$error}</li>. Ale to už tam myslím máte.
Pomohlo takto?

Na tu paginaci zkusím mrknout zítra, určitě to bude nějaká drobnost @Chrynn

@Chrynn
Copy link
Copy Markdown
Owner

Chrynn commented Dec 11, 2023

@filipjakub Dekuji za vysvetleni.

Ja jsem to prave pouzival, presne jak to popisujete. Ve vlastni validaci (ve tride bokem nebo onValidate) jsem si nasetoval errory primo k danym inputum. Ale doufam jsem, ze kdyz si zapnu nette forms, tak to pujde nejak premostit, abych si tu validaci nemusel vytvaret sam (pouzil tu Netti co je na definovani formulare). To premosteni by bylo prave nejidealnejsi, aby se ta hlaska vygenerovana Nette rovnou zobrazila u toho formulare tzv. provedlo to prirazeni inputu $form['input'] za me.

Lze provest i toto popisovane chovani? Nebo pokud chci zobrazit hlasku u formulare, musim si udelat vzdy vlastni validaci onValdiate? Nebo lze nejak uvest jakou exception ma input (backend) hodit pokud selze validace? pak bych si to mohl odchytit v tom try catchi napriklad, jak to mate v ukazce (napr. WrongEmailException -> $form['email']->addError('')).

@filipjakub filipjakub closed this Dec 12, 2023
@filipjakub filipjakub force-pushed the 38-feature-event-moudle-admin branch from 641c2f3 to 5a6e160 Compare December 12, 2023 20:15
@filipjakub filipjakub reopened this Dec 12, 2023
@filipjakub
Copy link
Copy Markdown
Author

Zdravím, tak paginace by měla být funkční zde 9cfff51. Problém byl v tom, že při odkazu Event:default v n:href se vždy znovu načetla stránka znovu, protože je to actionDefault. Já to přepsal ať to posílá requesty na handlePageChange!, což je ten signál jak jsem zmiňoval. Pozná se tak, že má v latte u odkazu '!'.
Díky toho se jakoby neposílá request na nové načtení stránky ale jen na přerendrovaní. V signálu si pak vytáhnu nové eventy a pošlu do šablony, včetně aktualizovaného paginatoru @Chrynn.

Co se té validace týče, už asi chápu správně, že chcete odstranit to dialog okno při například nevyplněném heslu? S tím si bohužel moc nevím rady, já ten netteForms nepoužíval, už ani nepamatuju. Jediné co mě napadá, tak vypnout validaci na formuláři, ale to si nejsem jistý, jestli pak budou fungovat ty errory (ikdyž minimálně $form->addError() by měl fungovat).
Dá se to vypnout pomocí $form->addSubmit('submit')->setValidationScope([]); na submit button a napsat si vlastní validace. Plus je potřeba vytahovat hodnoty z formuláře pomocí ->getUntrustedValues() místo klasických ->getValues().
Tady nějaký rychlý nástřel principu:
image

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants