Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [OOP] Klasa generująca formularze
Forum PHP.pl > Forum > PHP
Deviant
Witam,
postanowiłem nauczyć się w końcu programowania obiektowego w php i zacząłem pisać klasę, której zadaniem będzie generowanie formularza. Natknąłem się jednak na problem z dodawaniem pól.
Moje założenie jest takie, że po utworzeniu pola za pomocą klasy formInput, dodaje je do "ciała formularza" metodą registerField i na końcu wyświetlam całość. Niestety w tym momencie nie potrafię sobie z tym poradzić bez serializacji obiektu.
  1. <?php
  2.  
  3. class Form //klasa tworzy zaczniki <form></form> oraz dodaje pola do formularza
  4. {
  5. public $formAction; //zmienna ACTION formularza
  6. public $formMethod; //metoda wysyłania danych z formularza
  7. public $formFields = array(); //tablica pól formularza
  8.  
  9. function __construct($action,$method){
  10. $this->formAction=$action;
  11. $this->formMethod=$method;
  12. }
  13.  
  14. function regisetrField($pole){ //dodaje pole do tablicy $formFields
  15. $this->formFields[] = $pole;
  16. }
  17.  
  18. function createForm(){ //tworzy kod formularza;
  19. echo '<form action="'.$this->formAction.'" method="'.$this->formMethod.'">';
  20. $ile = count($this->formFields);
  21.  
  22. for ($i=0; $i<$ile;$i++){
  23.  $tab[$i]=unserialize($this->formFields[$i]);
  24.  echo '<input type="'.$tab[$i]->inputType.'" name="'.$tab[$i]->inputName.'" value="'.$tab[$i]->inputValue.'" />';
  25. }
  26. echo '</form>';
  27. }
  28.  }
  29.  
  30. class formInput //tworzenie pola input dla formularza
  31. { 
  32. public $inputName;
  33. public $inputType;
  34. public $inputValue;
  35.  
  36. function __construct($name,$type,$value){
  37. $this->inputName = $name;
  38. $this->inputType = $type;
  39. $this->inputValue = $value;
  40. } 
  41.  
  42. function __set($name, $value){
  43. $this->name = $value;
  44. }
  45. function __get($name){
  46. return $this->name;
  47. }
  48. }
  49.  
  50. ?>

  1. <?php
  2.  
  3. $form = new Form('obsluga.php', 'POST');
  4. $t1 = new formInput('pole1', 'text','Jakaś wartość ');
  5. $t2 = new formInput('pole2', 'text','Jakaś wartość 2 ');
  6. $form->registerField(serialize($t1));
  7. $form->registerField(serialize($t2));
  8. $form->createForm();
  9.  
  10. ?>


Całość niby działa tak, jak chcę jednak ta serializacja każdego pola nie daje mi spokoju.
Moje pytanie sprowadza się do tego w jaki sposób przeprogramować te klasy aby serializacjia nie była konieczna? Może powinienem cały kod zamknąć w jednej klasie? Proszę o naprowadzenie mnie na właściwą drogę lub chociaż podanie jakiegoś słowa kluczowego, bo już sam nie wiem czego powinienem szukać.
Dziękuje za uwagę i Pozdrawiam.
siemakuba
a nie lepiej tak:
  1. <?php
  2. $form = new Form('obsluga.php', 'POST');
  3. $form->registerField(new formInput('pole1', 'text','Jakaś wartość '));
  4. $form->registerField(new formInput('pole2', 'text','Jakaś wartość 2 '));
  5. $form->createForm();
  6. ?>


lub ewentualnie zlap najpierw do zmiennej obiekty formInput jezeli cos po drodze z nimi robisz. Potem w Form::createForm
  1. <?php
  2.  
  3. for ($i=0; $i<$ile;$i++){
  4.  
  5.  echo '<input type="'.$this->formFields[$i]->inputType.'" name="'.$this->formFields[$i]->inputName.'" value="'.$this->formFields[$i]->inputValue.'" />';
  6. }
  7.  
  8. ?>

jednym słowem, robisz to samo, ale bez serializacji... no nie wiem, ja nie widze porzyczyny dlaczego mialoby to nie dzialac bez serializacji...
pozdr.
Deviant
  1. <?php
  2. $this->formFields[$i]->inputType
  3. ?>

Nie wiedziałem, że taki zapis jest możliwy. Dziękuje bardzo smile.gif
Pozdrawiam
hwao
  1. <?php
  2. function createForm(){ //tworzy kod formularza;
  3. $sBuffor = '<form action="'.$this->formAction.'" method="'.$this->formMethod.'">';
  4. foreach( $this->formFields As $Form ) {
  5.  $sBuffor .= '<input type="'.$Form>inputType.'" name="'.$Form->inputName.'" value="'.$Form->inputValue.'" />';
  6. }
  7. return $sBuffor .= '</form>';
  8. }
  9. ?>
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.