2011-02-24 12 views
6

W środowisku CakePHP reguły sprawdzania poprawności stanowią własność modelu. Oznacza to, że nie ma znaczenia, skąd pochodzą dane: gdy chcesz zapisać je w modelu, będzie musiał przejść walidację.Walidacja jako własność formularza

Zamiast tego w symfony określasz zasady sprawdzania poprawności dla każdego formularza. Ponieważ może istnieć więcej niż jedna postać na model (a formularze mogą obejmować dane z różnych modeli), wynikiem jest to, że dane dla niektórych modeli mogą wymagać przekazania różnych filtrów, zgodnie z formą, z której pochodzą.

Rozumiem, że może to być czasami przydatne, a nawet CakePHP zapewnia metody określania różnych reguł sprawdzania poprawności w locie, jeśli chcesz. Ale to jest wyjątek, a nie zasada. Wydaje mi się, że projektowanie w drugą stronę otwiera drzwi do błędów, w których aktualizujesz swoje zasady sprawdzania poprawności, ale zapomnij sprawdzić wszystkie formularze.

Z drugiej strony jestem pewien, że Fabien Potencier jest mądrzejszy ode mnie i prawdopodobnie pomyślał o tym projekcie. Tak więc pytanie mhy to:

Jakie są dobre powody, dla których należy zatwierdzić na podstawie formularza (z reguły, a nie jako wyjątek)?

+0

Dlaczego upadły? Myślę, że jest to uzasadnione pytanie dotyczące wyboru projektu. : -? – Andrea

+1

"Wydaje mi się, że projektowanie w drugą stronę otwiera drzwi do błędów, w których aktualizujesz swoje zasady sprawdzania poprawności, ale zapomnij sprawdzić wszystkie formularze." Jeśli poprawnie zrozumiem twoją obawę, możesz tego uniknąć, tworząc podklasy swojego formularza i zmieniając tylko walidatory specyficzne dla tej podklasy. Na przykład, aby ograniczyć email do konkretnej domeny dla określonego typu formularza użytkownika, jak w przykładzie circusdei, utwórz 'class UserRegistrationForm rozszerzającą UserForm' i zastąp" globalny "walidator na konkretny. – yitznewton

Odpowiedz

3

Powiedziałbym, że są to 2 różne rzeczy.

modelu Walidacja - potwierdza, że ​​dane pochodzące do modelu jest ważna dla utrzymywania się i utrzymuje integralność logiki biznesowej (wspólne walidacji CakePHP)

Form filtrowanie danych - sprawdza, czy formularz jest wypełniony w użyciu dopuszczalne wartości. Oczywiście istnieje pewne pokrywanie się i wiele czasu walidacji formularza jest obsługiwane przez walidację modelu. Innym razem może nie być.

Na przykład formularz może wymagać znajomości stanu pola wyboru, aby określić następną sekcję kreatora, która musi zostać wyświetlona. Nie ma to nic wspólnego z modelem, ale jest ważnym wymogiem walidacji.(pole wyboru lub przycisk opcji ma wartość w zestawie wartości prawnych).

Oczywiście przy użyciu CakePHP można z łatwością napisać kombinację komponent/zachowanie, która dotyczy obu scenariuszy przy użyciu indeksów z kluczami w tablicy sprawdzania poprawności. Wystarczająco łatwe, aby ustawić klucz "domyślny", który jest zawsze używany, oraz klucz dla każdej "akcji", która określa dodatkową logikę walidacji.

Istnieje kilka gotowych rozwiązań, jeśli trochę google.

1

Dobre powody, o ile wiem: 1. Kilka formularzy. 2. Formularze o bardzo różnej funkcjonalności. 3. Wiadomość e-mail może wymagać innych zatwierdzeń (adres e-mail logowania może wymagać adresu URL z adresu [email protected], podczas gdy wiadomości e-mail z rejestracją mogą pochodzić z dowolnej domeny).

2

Zapominasz o dziedziczeniu. Oto co mam na myśli:

  • podstawowe zasady walidacji pochodzić z schematu bazy danych, rzeczy takie jak długość łańcucha, typ pola, itd. - to iść do klasy BaseModelForm
  • można łatwo zastąpić je w podklasach jak ModelForm (i radzimy, ponieważ klasy Base ~ są generowane automatycznie, a utracisz modyfikacje przy następnej regencji) możesz je ponownie podklasować, jeśli chcesz zmienić kilka walidatorów (lub widgetów).

Czasami mam różne reguły sprawdzania poprawności dla każdego formularza, takie jak dla zaplecza, jeden dla interfejsu - nawet jeśli mają do czynienia z tym samym modelem. Podstawowe reguły pochodzą z automatycznie wygenerowanej klasy, a ja zmieniam kilka widżetów i weryfikatorów lub usuwam kilka.

Powiązane problemy