Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Obsługa Formularzy w MVC
Forum PHP.pl > Forum > PHP
Luke_Star
Pisze dosc spory kod i zastanawiam sie jaka według was jest najlepsza, najszybsza a co najwazniejsze najbezpieczniejsza forma przetwarzania danych z formularzy. Zarówno ze strony kodu php jak i walidacji. Rozumiem ze jest to temat szeroki jednak nie daje mi juz zasnac od 3 dni, prosiłbym więc o dobre rady od ludzi z o wiele wiekszym doświadczeniem.
envp
Cytat
Zarówno ze strony kodu php jak i walidacji


Rozumie, że walidację chcesz przeprowadzić w js, skoro nie uwzględniasz jej w php?

Moja rada - walidacja w js wstępna, w php ostateczna i dogłębna.

a najlepiej zacząć od

  1. <?php
  2. if(submit){}
  3. ?>


Walidować, najlpeiej gotowym rozwiązaniem - nie wiem z Zend, lub Rapide. No i potem forwardować, jeśli ok na akcję która dodaje czy cośtam robi, lub forwardować na tą samą jeśli błąd + wyświetlenie co nie tak... To moje zdanie, ale może marne...
Luke_Star
walidacja raczej i z jednej i zdrugiej strony, po co obciazac serwer jakims całkowicie niepoprawnym wpisem. Mam pytanko co do akcji formularzy, jak to działa w bardzo duzych skyptach? Chodzi mi dokładniej jak ustawione jest <form action="">.
My4tic
Cytat(Luke_Star @ 12.11.2006, 20:26:16 ) *
Mam pytanko co do akcji formularzy, jak to działa w bardzo dużych skyptach? Chodzi mi dokładniej jak ustawione jest <form action="">.


Zakładając ten temat sam sobie odpowiedziałeś wpisując jego nazwę smile.gif Jeśli chcesz trzymać się MVC to powinieneś kierować dane do kontrolera - zazwyczaj będzie to index.php

Poza tym chyba lepiej będzie napisać klasę obejmującą żądania użytkowników ($_POST,$_GET, $_COOKIE, $_REQUEST) i klasę do walidacji danych. Poszukaj na forum pod słowem 'request' bo tak często są nazywane tego typu klasy.

I mały OT na koniec...

Cytat(Luke_Star @ 12.11.2006, 20:26:16 ) *
jak to działa w bardzo dużych skyptach?


Jeśli trzymasz się wzorca projektowego jakim jest MVC to raczej ciężko nazwać aplikacje napisaną w tym stylu 'skryptem'. Skrypt to coś w stylu 'all in one' - jeden index.php i w nim wszystko. Dlatego raczej ciężko spotkać 'duży' skrypt - tym bardziej w MVC.
thornag
Ja u siebie mam to rozwiazane tak.

Calym requestem (http) zajmuje sie klasa wlasnie HttpRequest, to ona zarzadza danymi $_POST, $_GET itp. Do tego jest klasa Validation (czy jakokolwiek chcesz to nazwac) o interfejscie zblizonym do:

  1. <?php
  2. public static function hasMinimalLenght($iLenght, $sValue) 
  3. public static function hasMaximalLenght($iLenght, $sValue) 
  4. public static function hasOnlyPermittedCharakters($sCharakters, $sValue) 
  5. public static function hasNonPermittedCharakters($sCharakters, $sValue) 
  6. public static function isLesThan($iLess, $iValue, $bEqualOrLess = false) 
  7. public static function isMoreThan($iMore, $iValue, $bEqualOrLess = false) 
  8. public static function isEqualTo($iEqual, $iValue) 
  9. public static function isNotEqualTo($sEqual, $iValue) 
  10. public static function mustMatchRegexp($sRegexp, $sValue)
  11. public static function mustNotMatchRegexp($sRegexp, $sValue)
  12. ?>


Kiedy kieruje formularz do odpowiedniego kontrollera i akcji, ta pyta sie request o dane a pozniej przepuszcza to przez funckje walidacyjne. Rozwiazanie to jest bardzo proste i prymitywne, ale zarazem dziala poprawnie. Klase taka mozna dowolnie rozbudowywac, dodac do niej jakies lancuchy tych ograniczen, pozniej tylko podac parametry i zeby sie wszystko samo zrobilo. Ogolnie koncepcja taka zeby wykonac klase odpowiedzialna za walidacje danych.

W ksiazce PHP5 Zaawansowane Programowanie spotkalem sie tez z pomyslem umieszczenia walidacji w samej klasie Requesta. Jakos pomysl mi nie przypadl do gustu, wystarczy mi ze Request serwuje mi dane zaciapkowane (miedzy '), z obcietymi znakami html badz zamienionymi na ASCII.
Prph
Cytat(thornag @ 13.11.2006, 11:46:52 ) *
  1. <?php
  2. public static function hasMinimalLenght($iLenght, $sValue) 
  3. public static function hasMaximalLenght($iLenght, $sValue) 
  4. public static function hasOnlyPermittedCharakters($sCharakters, $sValue) 
  5. public static function hasNonPermittedCharakters($sCharakters, $sValue) 
  6. public static function isLesThan($iLess, $iValue, $bEqualOrLess = false) 
  7. public static function isMoreThan($iMore, $iValue, $bEqualOrLess = false) 
  8. public static function isEqualTo($iEqual, $iValue) 
  9. public static function isNotEqualTo($sEqual, $iValue) 
  10. public static function mustMatchRegexp($sRegexp, $sValue)
  11. public static function mustNotMatchRegexp($sRegexp, $sValue)
  12. ?>



Troche przekombinowana klasa. Wiecej napiszesz sie uzywajac jej metod, niz piszac normalne warunki, np: isLesThan. I nie ma sensu pisac Is/IsNot - znowu za duzo sie napiszesz. Przeciez po to jest operator negacji "!".

Pozdrawiam, Adrian.
athabus
Jeśli chodzi o formularze to ostatnio znacznie bardziej preferuje gotowe rozwiązania bo
a) nie muszę wszystkiego pisać od początku
b ) znacznie szybciej tworzy się formularz i warunki do jego walicaji
c) trudno napisać naprawdę dobrą obsługę formularzy w pojedynkę
d) słabo znam js więc byłby problem ze wstępną walidacja sadsmiley02.gif

Ogólnie polecam klasę HTML_QuickForm - banalnie prosta w obsłudze a po małych ingerencjach i przeróbkach udało mi się ją dopasować do własnych potrzeb.

Co do pytania z tematu - to klasa ta ma wbudowane funkcje do walidacji i ekportu danych (nie trzeba odwoływać się przez $_POST tylko dane są od razu walidowane i w razie czego konwertowane (np. można zmienić , na . w wpisywanych liczbach). Oprócz całej sterty wbudowanych testów, można również pisać swoje własne i odwoływać się do nich poprzez funkcje zwrotne. IMHO najlepsza klasa z tych, które do tej pory widziałem
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.