Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP] Poprawne wczytanie $_POST do klasy
k8dz
post
Post #1





Grupa: Zarejestrowani
Postów: 8
Pomógł: 0
Dołączył: 5.02.2020

Ostrzeżenie: (0%)
-----


Mam formularz i po kliknięciu wyślij potrzebuję przekazać jego wartości do klasy, aby móc na nich wykonać operacje. Zastanawiam się jak to poprawnie powinno być wykonane. Czy takie rozwiązanie jest poprawne, czy powinienem to jakoś inaczej zrobić?

  1. $cena_plyty = 25; //domyślna wartość zmiennej
  2.  
  3. if ( isset($_POST['cena_plyty']) and is_numeric($_POST['cena_plyty']))
  4. {
  5. $cena_plyty = $_POST['cena_plyty'];
  6. }
  7.  
  8. $wycena = new Wycena;
  9. $wycena->ustaw_cene($cena_plyty);
  10. echo $wycena->wyswietl_wycene();
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
vokiel
post
Post #2





Grupa: Zarejestrowani
Postów: 2 592
Pomógł: 445
Dołączył: 12.03.2007

Ostrzeżenie: (0%)
-----


Cytat(k8dz @ 14.02.2020, 20:08:25 ) *
ten sposób mi się podoba, ale kurde nie do końca wszystko rozumiem.. Klasa Rule jest dla mnie jasna, ale metoda addRule() już nie za bardzo. Rozumiem, że metoda addRule() przyjmuje 2 parametry. Pierwszy parametr, to ten który ma być sprawdzony, ale ten drugi parametr z klasą Rule nie rozumiem.. jakbyś mi to jeszcze wytłumaczył i już nie zawracam więcej gitary


Tak, addRule() dodaje kolejne elementy do sprawdzenia w walidatorze. Bo domyślnie (bez ich podania) on nie wie co ma sprawdzać i na jakich polach. W samym walidatorze możesz po prostu zrobić sobie tablicę pól z przypisanymi do nich regułami do uruchomienia. Na koniec, przy valid() iterujesz po każdym polu, pobierasz jego wartość z $_POST i odpalasz na nim każdą regułę. Szybki przykład:

  1. class Validator
  2. {
  3. protected $items = [];
  4. protected $invalid = [];
  5.  
  6. public function addRule(string $field, Rule $rule)
  7. {
  8. if (!isset($this->items[$field]) {
  9. $this->items[$field] = [];
  10. }
  11. array_push($this->items[$field], $rule);
  12. }
  13.  
  14. public function valid(array $values)
  15. {
  16. foreach($this->items as $item => $rules) {
  17. $value = $values[$item] ?? null;
  18. forach ($rules as $rule) {
  19. if (!$rule->check($item)) {
  20. array_push($this->invalid, [
  21. $item => [
  22. 'value' => $value,
  23. 'rule' => $rule
  24. ]
  25. ] );
  26. }
  27. }
  28. }
  29.  
  30. return empty($this->invalid);
  31. }
  32.  
  33. public function getInvalid()
  34. {
  35. return $this->invalid;
  36. }
  37. }
  38.  
  39. $validator = new Validator();
  40. $validator->addRule('price', new Rule('not_empty'));
  41. $validator->addRule('price', new Rule('decimal'));
  42.  
  43. $isValid = $validator->valid($_POST);
  44. if (!$isValid){
  45. $validationErrors = $validator->getInvalid();
  46. }


Oczywiście, jeśli nie chcesz sobie ćwiczyć programowania to możesz wziąć dowolnego gotowca i go użyć tak jak pisał @viking.
Go to the top of the page
+Quote Post

Posty w temacie


Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 10.10.2025 - 22:55