![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 39 Pomógł: 4 Dołączył: 9.05.2012 Ostrzeżenie: (0%) ![]() ![]() |
Witam
Chciałbym stworzyć walidacje danych umiejscowioną w MVC. W poniższym kodzie walidacje umieściłem w kontrolerze(akcja insert). Mój cały problem sprowadza się do tego miejsca
Gdy dane są poprawne to jest ładowany model, który umieszcza ładnie i poprawnie dane w bazie danych. Lecz co zrobić gdy dane są niepoprawne? W moim założeniu jest żeby po wprowadzeniu błędnych danych wyświetliła się dalej strona z formularzem z informacją o błędnych danych. Więc jak zrobić aby przekazać obiekt $validation do widoku z formularzem tak abym mógł potem w widoku wyciągnąć informacje o błędach dishcontroller.php
dishview.php
|
|
|
![]() |
![]()
Post
#2
|
|
![]() Grupa: Moderatorzy Postów: 4 362 Pomógł: 714 Dołączył: 12.02.2009 Skąd: Jak się położę tak leżę :D ![]() |
Jak dla mnie chyba sensowniejsze byłoby wrzucenie walidacji do modelu i tam reagowanie na tego typu sytuację. Kontroler tylko by monitorował "co jest grane". Przykładowo walidacja mogła by rzucać jakiś wyjątek informujący o nieprawidłowym jej przebiegu.
-------------------- Najpierw był manual... Jeśli tam nie zawarto słów mądrości to zapytaj wszechwiedzącego Google zadając mu własciwe pytania. A jeśli i on milczy to Twój problem nie istnieje :D
|
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 39 Pomógł: 4 Dołączył: 9.05.2012 Ostrzeżenie: (0%) ![]() ![]() |
umieszczenie walidacji w modelu daje mi w sumie to samo, bo nie wiem jak wtedy wyświetlić stronę z formularzem i informacją o błędach.
Ten post edytował brzoza91 19.07.2012, 18:55:19 |
|
|
![]()
Post
#4
|
|
![]() Grupa: Moderatorzy Postów: 4 362 Pomógł: 714 Dołączył: 12.02.2009 Skąd: Jak się położę tak leżę :D ![]() |
No pomyśl... Masz model z metodą, która może rzucić wyjątek w przypadku naprawdę problemów, albo strukturę danych wynikową wspartą strukturą zwracającą komunikaty błędów. Całość wywołania metody z modelu obejmujesz try-catch w razie czego, ale monitorujesz też strukturę błędów. Jeśli jest ona pusta to ok, ale jeśli nie - to reagujesz.
-------------------- Najpierw był manual... Jeśli tam nie zawarto słów mądrości to zapytaj wszechwiedzącego Google zadając mu własciwe pytania. A jeśli i on milczy to Twój problem nie istnieje :D
|
|
|
![]()
Post
#5
|
|
![]() Grupa: Zarejestrowani Postów: 1 590 Pomógł: 185 Dołączył: 19.04.2006 Skąd: Gdańsk Ostrzeżenie: (0%) ![]() ![]() |
Najsensowniej jest powiązać ściśle walidację z formularzem i to niezależnie od OOP czy MVC. W strukturalnym radziłem sobie tak, że definiowałem walidację w szablonie formularza a następnie ją obsługiwałem odpowiednimi funkcjami - wystarczyło raz napisać validator a potem tylko go stosować.
Tutaj radzę na obiektach, jakoś tak logicznie: Fomularz - obiekt Walidator - też obiekt Zatem:
Oczywiście walidator można dodać bezpośrednio w klasie My_Form, wtedy nie zaprzątasz sobie nim głowy wcale, w kontrolerze skupiasz się na logice aplikacji. |
|
|
![]()
Post
#6
|
|
![]() Grupa: Moderatorzy Postów: 4 362 Pomógł: 714 Dołączył: 12.02.2009 Skąd: Jak się położę tak leżę :D ![]() |
@Pilsener: Bo to bardzo dobre podejście. Klasa walidatora powinna być osobną, bo w końcu to ona się zajmuje tym zadaniem, nie formularz sam w sobie i dzięi temu całość jest elastyczniejsza, gdyż nie ograniczamy walidacji jedynie do formularza. Możemy walidować wtedy wszelkie dane przychodzące do aplikacji, także pliki, strumienie. Walidator powinien mieć więc funkcje, która przyjmuje jakieś dane i konfrontuje je z regułami dla tych danych wybranymi oraz informuje o powodzeniu lub nie. Można jeszcze wcześniej dane przefiltrować (trimowanie, usuwanie znaków niedozwolonych itp). Przykład?
Oczywiście to przykładowo jest i może być inaczej w modelu implementowane i nie musi nawet być podobne, ale takie coś jest w miarę elastyczne, gdyż co dane wejściowe (niekoniecznie formularz!) to można reguły modyfikować, dodawać nowe operacje dla danych, czy wręcz pozwolić sobie na wywoływanie funkcji własnych. Zauważcie custom przy regułach dla pola username, gdzie można przekazać obiekt modelu User z wywołaniem funkcji sprawdzającej unikatowość. To tylko przykład, który obrazuje jak bardzo elastyczny można walidator zrobić. Przy walidacji formularza jedynie sprawdzi się czy formularz potraktowany dodanym walidatorem zawiera strukturę błędów czy może jest ona pusta. Zwróć też uwagę, że można obsłużyć bardziej złożone rzeczy. Ja w przykładzie połączyłem tablice POST i FILES ![]() -------------------- Najpierw był manual... Jeśli tam nie zawarto słów mądrości to zapytaj wszechwiedzącego Google zadając mu własciwe pytania. A jeśli i on milczy to Twój problem nie istnieje :D
|
|
|
![]() ![]() |
![]() |
Aktualny czas: 20.08.2025 - 16:48 |