![]() |
![]() ![]() |
![]() |
![]()
Post
#1
|
|
![]() Grupa: Zarejestrowani Postów: 697 Pomógł: 47 Dołączył: 19.12.2003 Skąd: Lublin Ostrzeżenie: (0%) ![]() ![]() |
Tak piszę sobie powoli mój framework i ostatnio zobaczyłem w Zendzie fajne rozwiązanie validatora
![]() Dla nieobczajonych. Klasa sprawdza poprawność elementów w tablicy na podstawie określonych wymogów. Przyklad uzycia
* odnosi się do wszystkich zmiennych przy czym wlaściwości elementu sa zawsze nadrzędne(tj. gwiazdka ma zawsze mniejszy priorytet, nawet jesli podamy ją jako ostatni element tablicy). Dostępne wymagania minlength - minimalna długość maxlength - maksymalna dlugosc required - czy element nie moze byc pusty(czy jest wymagany) between - wartosc musi sie miescic w podanym zakresie in - wartosc musi byc identyczna z jedna sposrod podanych type - typ zmiennej (tj. string, boolean, double, integer) lub obiekt klasy własnej. Jeśli deklarujemy wlasny typ to jako type przekazujemy obiekt naszej klasy pamietajac ze musi ona zawietac metodę isValid(), oraz zmienna $errors oraz zmienna $value Wiecej w przykladzie dostepnm w paczce. Pobierz Czekam na komentarze oraz pomysły na rozwinięcie listy wymagań oraz ogólnie opcji validatora. -------------------- Warsztat: Kubuntu, PhpStorm, Opera
|
|
|
![]()
Post
#2
|
|
![]() Grupa: Zarejestrowani Postów: 662 Pomógł: 45 Dołączył: 26.03.2007 Skąd: Warszawa Ostrzeżenie: (0%) ![]() ![]() |
Bardzo fajne narzędzie, jak wiesz sam coś takiego piszę więc wiem
![]() ![]() 1) Porządek w kodzie ![]() 2) W typie mogły by być wartości standardowe typu telefon, www, e-mail czy nawet ten pesel ![]() 3) Jeśli sprawdzę wszystkie pola, a później której osobno to sprawdza od nowa. Mógłbyś gdzieś zapisywać czy pole jest poprawnie wypełnione czy nie aby nie sprawdzać po 2 razy. 4) Komunikaty błędów mogłeś zrobić nie jako wiadomości a jako identyfikatory danego błędu. Można później łatwiej na nich operować ![]() To takie drobne uwagi spowodowane tym że sam pisze teraz taką bibliotekę, więc napisałem to co u siebie zrobiłem w inny sposób ![]() ![]() ps. Twoja klasa ma równo 100 linii mniej ![]() ![]() |
|
|
![]()
Post
#3
|
|
![]() Grupa: Zarejestrowani Postów: 697 Pomógł: 47 Dołączył: 19.12.2003 Skąd: Lublin Ostrzeżenie: (0%) ![]() ![]() |
@Moli: dzięki za komentarz. Co do opcji
1. Porzadek zrobiony, kod odchudziłem o okolo 40 linijek ![]() 2. Dodałem obsługę pola e-mail. Pesel jest typowo polskim wymysłem a z numerem telefonu jest tak, że nikt się nie trzyma standardowego zapisu +48.numer, 3. Cachowanie winików dodane 4. Tak jest mi wygodniej ![]() Dodatkowo dodalem parametr regexp umożliwiający określenie wyrażenia regularnego(w example.php jest pokazane użycie) Nowa paczka: Pobierz Licencja : AGPL3 Pozdrawiam -------------------- Warsztat: Kubuntu, PhpStorm, Opera
|
|
|
![]()
Post
#4
|
|
![]() Grupa: Zarejestrowani Postów: 6 476 Pomógł: 1306 Dołączył: 6.08.2006 Skąd: Kraków Ostrzeżenie: (0%) ![]() ![]() |
Ja u siebie trochę inaczej to rozwiązałem, ale:
1) Pliki są w kodowaniu UTF-8, dlatego też zamiast np. strlen" title="Zobacz w manualu PHP" target="_manual używaj mb_strlen" title="Zobacz w manualu PHP" target="_manual (pozwole sobie przyspamować http://blog.crozin.com/2008/08/11/operacje...odowanie-utf-8/ ![]() 2) Sprzydałoby się trochę więcej danych w przypadku błędu, dla przykładu: Zdanie ala ma kota ma więcej niż te 8 znaków, ale samo Too long może być czasem trochę niewygodne (np. gdy chcemy zautomatyzować wyświetlanie błędów użytkownikowi). Tutaj mógłbyś zwrocić: False (czyli, że błąd) + Spodziewaną długość (8) + Długość jaką miał ciąg (13) + ew. sam ciąg - aby wygodnie wyświetlić szczegółowy komunikat Cytat Jakieś tam pole może mieć maksymalnie 8 znaków - podano 13. 3) Apropo sposobu zgłaszania błedów - sprzydała by się możliwość ustawiania "indywidualnych" błedów - posłużę się tutaj moim przykładem : I kilka słów wyjaśnienia. Kernel_Validate::customMessage() (btw: właśnie się zooriętowałem, że mam customMassages w orginalnym kodzie ![]() Sam walidator działa w miarę podobnie do Twojego, z tym, że reguły walidacji możemy podać jako tablice (jak u Ciebie), albo jako string z "pseudo-kodem", a same walidatory (Equal, sameAs, Email itp.) to klasy implementujące interfejs i dziedziczące po abstrakcyjnej klasie ![]() PS. Nie wiem dlaczego, ale Twój sposób formatowania kodu jest dla mnie strasznie nieczytelny ![]() |
|
|
![]()
Post
#5
|
|
![]() Grupa: Zarejestrowani Postów: 697 Pomógł: 47 Dołączył: 19.12.2003 Skąd: Lublin Ostrzeżenie: (0%) ![]() ![]() |
1) dzięki wielkie za link, przyda się
![]() ![]() 2,3) Ostatnio zauwazyłem identyczny rodzaj określania komunikatów błędów w Zendzie i przyznam, że rozwiązanie jest dosyć ciekawe i bardzo prawdopodobne, że wprowadzę je u siebie(jednak muszę to zintegrować z moja klasę do obsługi języków stąd te pseudokomunikaty typu "Too long") Dzięki za pomysł z sameAs i equal ![]() PS: nieczytelność kodu to rzecz względna ![]() Pozdrawiam -------------------- Warsztat: Kubuntu, PhpStorm, Opera
|
|
|
![]()
Post
#6
|
|
![]() Grupa: Zarejestrowani Postów: 6 476 Pomógł: 1306 Dołączył: 6.08.2006 Skąd: Kraków Ostrzeżenie: (0%) ![]() ![]() |
Cytat jednak muszę to zintegrować z moja klasę do obsługi języków stąd te pseudokomunikaty typu "Too long" Nic prostszego (pisząc pierwszego posta sam zamieniałem "zmienne językowe" na zwykły tekst)Tutaj właśnie ważne jest to, aby w przypadku wystąpienia błędu nie zwracać tylko False ![]() Stała Kernel_Validate_Equal::NOT_EQUAL to string notEqual i w przypadku błeu zwracana jest tablica Kod Array( I klucz tablic to nazwa pola, zero - nazwa walidatora, jeden - wartość zmiennej, dwa - argumenty przekazane walidatorowi (np.: że ma być równe (equal) 1)[rules] => Array( [0] => 'notEqual', [1] => '0', [2] => Array( [0] => '1' ) ), [login] => Array( [0] => 'notAlnum', [1] => 'XSS <>"'&', [2] => Array() ) ) Mając te dane wystarczy: To już pisane z palca, ale chyba powinno być dobrze ![]() |
|
|
![]()
Post
#7
|
|
![]() Grupa: Zarejestrowani Postów: 697 Pomógł: 47 Dołączył: 19.12.2003 Skąd: Lublin Ostrzeżenie: (0%) ![]() ![]() |
Dokładnie tak to u mnie działa
![]() Pozdrawiam. -------------------- Warsztat: Kubuntu, PhpStorm, Opera
|
|
|
![]() ![]() |
![]() |
Wersja Lo-Fi | Aktualny czas: 18.07.2025 - 12:35 |