![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 4 291 Pomógł: 829 Dołączył: 14.02.2009 Skąd: łódź Ostrzeżenie: (0%) ![]() ![]() |
Hej,
mam małą zagwozdkę logiczną w tworzeniu klasy generującej formularz. Teoretycznie takową klasę napisałem, ale mam kilka wątpliwości. Od razu dodam, że aplikacja oparta jest o MVC. Skrócony kod klasy:
Formularz generuję w widoku, np.
Tutaj mam taką rozkminę, czy formularz lepiej generować w widoku jak powyżej, czy w osobnej klasie, np. application/forms/RegisterForm.php Pierwsze rozwiązanie widziałem w Yii, a drugie w Zendzie. A teraz sprawa najważniejsza. Posiadam osobną klasę walidującą pola formularza wg. zasad ustalonych w modelu. Tego nie będę pokazywał, bo nie ma związku. Chcę mieć dostęp do informacji o wszystkich walidujących polach w klasie walidacyjnej. Kontroler: Jeżeli naciśnięto przycisk, zbieram dane z formularza, pobieram reguły walidacji i przekazuję to do klasy walidującej np. $this->validate($data, $rules) $data zawiera tablicę $_POST. W klasie walidacyjnej następuje sprawdzenie poprawności przesłanych danych wg. $rules. W tejże klasie muszę mieć dostęp do tego jaki dane pola ma $label - i to jest cały problem. Nie mam za bardzo pomysłu jak się do tego dostać. Podejrzewam, że w klasie MyForm i metodzie createElement() muszę zapisywać dane każdego tworzonego pola i zapisywać np. w statycznej własności klasy $formData. To nie jest problem. Tylko odwołanie się do np. MyForm::$formData z klasy walidacyjnej przecież nie pobierze tych danych, bo już ich tam nie "będzie". A po co mi wiedzieć jaki label ma dane pole? Ano po to, że jak nie przejdzie walidacji to do tablicy KlasaWalidacyjna->errors mogę dodać $label.' can not be empty' Ten post edytował Turson 24.08.2014, 11:23:12 |
|
|
![]() |
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 97 Pomógł: 45 Dołączył: 5.05.2010 Ostrzeżenie: (0%) ![]() ![]() |
Może zamiast metody z 6 argumentami lepiej będzie przekazać do niej 1 argument w postaci tablicy w której będą się znajdowały wszystkie niezbędne informacje. Bo co w przypadku jeśli chce dodać klasę albo ID do pola tekstowego? Który parametr za to odpowiada? Ostatni? A jak będę chciał dodać klasę do label to też ostatni?
Lepszym wyjściem moim zdaniem byłoby:
Następnie przekazujesz ten formularz do widoku i w widoku Dekorator odpowiada za poprawne wyświetlenie.
W renderLabel() dajesz input i tworzysz label na podstawie klucza label. W renderInput() tworzysz input na podstawie klucza input. A podczas walidacji dodajesz klucz error i jeżeli nie jest pusty to wyświetlasz błedy pod polem w którym się pojawiły. W $rules przydałoby się jeszcze przekazać informację z jakiego validatora chcesz skorzystać bo może się zdarzyć tak że dwa validatory będą miały dwa takie same klucze np. min_length albo pattern w którym będzie wyrażenie Regexp i co wtedy? Skąd wiadomo z jakiego validatora skorzystać? |
|
|
![]() ![]() |
![]() |
Aktualny czas: 15.10.2025 - 18:59 |