PDA

Zobacz pełną wersję : Walidacja formularza po stronie serwera



Robster
28-06-2014, 12:19
Witam,

Może wyda się to śmieszne, ale mam problem z walidacją formularza w Joomla! 2.5 po stronie serwera. A dokładnie o wykorzystanie "joomlowych" metod przeznaczonych do tego celu. W ogóle nie rozumiem co jest w dokumentacji napisane (niedokończonej zresztą (http://docs.joomla.org/Server-side_form_validation)), nawet repopulacji formularza nie mogłem ogarnąć :/
Macie może jakiś link do przykładu z validacją i repopulacją? Bardzo nie chcę tego pisać tego od początku po swojemu, bo nie po to z Joomla korzystam :/

Jola
29-06-2014, 00:59
Możesz napisać konkretnie o jaki formularz (pola) i jaką validację (wymagane, zawartość) Ci chodzi.
Pierwszy raz spotykam się z wyrażeniem: "repopulacja" - co to za stwór?

Robster
29-06-2014, 06:49
Cześć Jola,

Chodzi ogólnie o walidację (pola integer, email, min/max liczba znaków). Od dłuższego czasu siedzę na Symfony2 i CodeIgniter, a teraz potrzebuję napisać coś na Joomla! i zwyczajnie się przestawić nie mogę.
Dokumentacji J! nie potrafiłem czytać od samego początku, więc to co teraz przeczytałem o formularzach w ogóle mi nie wystarcza.

Obecnie planuje stworzyć własną metodę walidacyjną, którą będę odpalał po submicie formy, ale jest to dla mnie mega nielogiczne, skoro korzystam z frameworka.

Repopulacja - ponowne załadowanie formularza danymi, z wcześniej wypełnionych pól. Raczej sobie tego nie wymyśliłem, ale kto tam wie ;)

Jola
29-06-2014, 20:46
Czy na pewno po stronie serwera a nie klienta?
http://docs.joomla.org/Client-side_form_validation

Robster
30-06-2014, 18:05
Na pewno po stronie serwera :)

Jola
01-07-2014, 02:39
Nie wiem czy Ci to pomoże. Przetestuj sobie na zapisie konfiguracji jakiegoś komponentu. Pola:

<field name="email" type="text" class="inputbox validate-email" description="E-mail" label="E-mail" required="true" validate="email" size="30" />
<field name="numer" type="text" class="inputbox validate-numeric" description="Pole numeryczne" label="Pole numeryczne" required="true" size="30" />
W pliku: administrator/components/com_config/views/component/tmpl/default.php
do skryptu javascript u góry dopisz funkcję:

function sprawdz(task, form){
if (document.formvalidator.isValid(form)){
Joomla.submitform(task, form);
}
else {
alert('Błednie wypełniony formularz!');
return false;
}
}
a do formularza dodaj dwa przyciski:

<button type="button" class="validate" onclick="sprawdz('component.apply', this.form);">TEST zastosuj</button>
<button type="button" class="validate" onclick="sprawdz('component.save', this.form);">TEST zapisz</button>
Przetestuj działanie.

tlewap
01-07-2014, 10:23
Co konkretnie chcesz stworzyć? Ja kiedyś bardzo często korzystałem z chronoform i dawało ono praktycznie nieograniczone możliwości.
Z tego co pamiętam obsługiwało zarówno walidację przez serwer jak i w przeglądarce.

//Edit: Z tego co widzę dodatek jest cały czas rozwijany: http://www.chronoengine.com/

Robster
01-07-2014, 17:11
@Jola, ale to dalej jest walidacja po stronie klienta :/ Co za problem zmienić sobie w DOM'ie klasy walidacji i filtry na poszczególnych polach? Albo zmienić ten JS tak by zawsze przepuszczał formularz? Skoro @Jola nie skojarzyłaś od razu tematu, a do tej pory znałaś odpowiedzi na wszystkie moje pytania, to chyba Joomla! ma tutaj dużą lukę :/ Zdawało mi się, że we wszystkich frameworkach formularze i ich prosta obsługa, to priorytet. W dokumentacji o walidacji po stronie serwera niby coś jest, ale jest to moim zdaniem NIC :/
Trudno, napisałem własną klasę walidującą, a jeśli kiedyś uda mi się znaleźć "Joomlaowe" rozwiązanie tej kwestii, to nie omieszkam się z Wami tutaj tym podzielić.

@tlewap dzięki, ale mnie chodzi o rozwiązanie udostępnianie przez framework (albo CMS troszkę się z tym udostępnianiem bibliotek pogubiłem) Joomla! dla developerów, a nie zewnętrzne dodatki.

KES
01-07-2014, 22:43
@Robster jak już pewnie zauważyłeś formularze w Joomla są tworzone poprzez pliki xml.
Skorzystamy z przykładu który dodała @Jola:


<form>
<field name="email" type="text" class="inputbox validate-email" description="E-mail" label="E-mail" required="true" validate="email" size="30" />
</form>


Czyli pole o nazwie emaila będzie mieć walidację typu emaila.
Walidacje w joomla to tzw. rules, klasy typu rules są w:


libraries/joomla/form/rule
libraries/cms/form/rule


zawsze możesz dodać swój własny typ rule, poprzez dodanie w pliku xml ścieżki do folderu z twoimi rule'ami. Np. masz w swoim komponencie rule'e w folderze models/rules i jest on o nazwie twoj_wlasny_rule . To dodajesz go tak:


<form addrulepath="/administrator/components/com_helloworld/models/rules">
<field name="email" type="text" class="inputbox validate-email" description="E-mail" label="E-mail" required="true" validate="twoj_wlasny_rule" size="30" />
</form>

Więcej poczytać możesz na Joomla Wiki (http://docs.joomla.org/J2.5:Developing_a_MVC_Component/Adding_verifications)

Robster
02-07-2014, 17:11
@KES czytałem, ale jakoś nie rozumiem. Chodzi o sam moment walidacji, w którym miejscu (w kodzie z linka który podałeś), jest ona odpalana i są zwracane ewentualne komunikaty z błędami walidacji?

Robster
02-07-2014, 18:21
Ok, poradziłem sobie. Co prawda wskazaliście mi palcem gdzie mam czego szukać, ale słowo daję, jest to dla mnie mega nieintuicyjne.

Dziękuję za pomoc.