Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Walidacja w MVC
Forum PHP.pl > Forum > PHP > Object-oriented programming
skubekk
Mam mały dylemacik dotyczący OOP. Gdzie najlepiej umiescic walidacje danych dostarczonych przez uzytkownika? Ja widze 3 rozwiązania
1) Przy "setach"
  1. <?php
  2. class user
  3. {
  4. public function setLogin( $login )
  5. {
  6. if ( !UserValidate::login( $login ) )
  7. {
  8. throw new ValidateException( 'login' );
  9. }
  10. $this->setField( 'login', $login );
  11. }
  12. }
  13. ?>

2) Przy zapisywaniu danych
  1. <?php
  2. class user
  3. {
  4. public function save()
  5. {
  6. if ( !UserValidate::login( $this->login ) )
  7. {
  8. throw new ValidateException( 'login' );
  9. }
  10. if ( !UserValidate::pass( $this->pass ) )
  11. {
  12. throw new ValidateException( 'pass' );
  13. }....
  14.  
  15. // zapisywanie
  16. }
  17. }
  18. ?>

3) W kontrolerze zanim wprowadzimy dane do obiektu
  1. <?php
  2. class UserController
  3. {
  4. public function save()
  5.  {
  6.  try
  7.  {
  8. if ( !UserValidate::login( $_POST['login'] ) )
  9. {
  10. throw new ValidateException( 'login' );
  11. }
  12. if ( !UserValidate::pass( $_POST['pass'] ) )
  13. {
  14. throw new ValidateException( 'pass' );
  15. }....
  16. }catch(ValidateException $e)
  17. {
  18. echo $e->getMessage();
  19. }
  20. $user = new user;
  21. $user->setLogin( $_POST['login'] )
  22. $user->setPass( $_POST['passs'] )
  23. $user->save();
  24.  } 
  25. }
  26. ?>


Jak wy rozwiązaliscie ten problem? Z góry dzięki za odpowiedz.
envp
Hmm mi się wydaje, że w kontrolerze smile.gif
darektbg
Witam !
Wydaje mi się, że najlepszym miejscem będzie kontroler winksmiley.jpg

Pozdrawiam
Darektbg
dr_bonzo
Walidujesz model -- to w modelu.
Pozatym pomysl jak bedzie wygladac akcja tworzenia obiektu i edycji + walidacja wszystkich pol w kontrolerze.
Strzałek
dr_bonzo wyjaśnił gdzie powinna zajść walidacja, ja jeszcze dołożę swoje 2 grosze. Mianowicie używanie statycznych metod do walidacji jest dość mało obiektowe, jak i mało wygodne. Zaraz wrzucę Ci moją małą klasę do walidacji.
Cysiaczek
Mało obiektowe? Powiedz mi dlaczego i jak to ma być obiektowe - nie potrafię sobie tego wyobrazić. Może chodzi o zastosowanie pewnej implementacji dekoratora?

Pozdrawiam.
Strzałek
Otworzyłem masę zakładek a zapomniałem o tym, ale już jestem wraz z moim obiecanym kodem: http://forum.php.pl/index.php?showtopic=58987


Cysiaczek a co obiektowego jest w używaniu klasy która wszystkie metody ma statyczne? To tak samo jak strukturalnie, po za tym ze jest class, public przed metodą, oraz inaczej się to wywołuje winksmiley.jpg
ActivePlayer
ja dodam tez cos o czym nie wszyscy wiedzą (wiedzieli:P) a strzalek wie smile.gif

http://strzalek.net/blog/3/input-filter
Cysiaczek
@strzałek - nic nie ma, ale czy wogóle musi być? Moim zdaniem nie musi, bo nie ma sensu na siłę wciskać obiektów wszędzie. Ubierając zastaw filtrów nawet w zwykłą klasę zyskujesz ładny interfejs : )

Pozdrawiam.
skubekk
Własną klase do obsługi walidacji juz mam. Zresztą umiesciłem ją juz jakis czas temu na tym forum. http://forum.php.pl/index.php?showtopic=56211&hl=
Cytat
Strzałek: ...Mianowicie używanie statycznych metod do walidacji jest dość mało obiektowe, jak i mało wygodne...

Owe statyczne metody to implementacja dekoratora.
Dzięki za rozwianie moich wątpliwości.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.