Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP] Klasa formular, Jak się do tego zabrać?
Tarcil
post
Post #1





Grupa: Zarejestrowani
Postów: 41
Pomógł: 0
Dołączył: 24.11.2006

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


Witam

Mam troszkę dzisiaj czasu i buszuję po forum. Nospor napisał gdzieś, że do generowania formularzy (i zabezpieczenia się przed F5) używa własnej klasy (chyba, że źle zrozumiałem jego wypowiedź).

Jako, że próbuję się "otrzaskać" z obiektowo zorientowanym php od razu powstał w mej łepetynie pomysł "napisz sobie klasę do formularzy"... No i faktycznie, pomysł mi się podoba bo jednak formularzy jest mnóstwo na stronach, przy których coś usiłuję dłubać i gdyby się udało fajną klasę do tego zrobić, byłoby spoko.

Na razie wymyśliłem to tak:
1. Główna klasa to oczywiście klasa formular
2. Do niej dodałbym klasę formField, której właściwości to $_name (nazwa pola, do wrzucenia w name="") $_label (do wrzucenia w <label></label>) i $_desc (opis pola)
3. po klasie formField dziedziczyłyby klasy inputField (z właściwością type, czyloi wartością parametru type=""), selectField (z metodą addOption), textareaField itd...
4. Strukturę formularza tworzyłbym w sposób przybliżony do tego:
  1. <?php
  2. $form = new formular();
  3. $field = new inputField('name', Nazwa, 'wpisz swoje imię');
  4. $filed2 = new selectField('plec', 'Płeć', 'wybierz płeć');
  5. $filed2->addOption('k', 'kobieta');
  6. $filed2->addOption('m', 'mężczynza');
  7.  
  8. $form->generateHTML();
  9. ?>

wynikiem ostatniej metody byłby gotowy kod formularza.

Co Wy o tym myślicie? Jaki jest lepszy sposób na to? Jeszcze muszę tu gdzieś zapodać metodę insertValue(), która by wpisywała domyślną wartość... i do pól typu checkbox i do selecta jeszcze coś w rodzaju selectCurrentValue(). Ale czy wg Was podstawowe założenia mają sens? Jeśli nie, to wskażcie mi proszę luki w moim rozumowaniu.

Pozdrawiam!
Tarcil
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
chiken
post
Post #2





Grupa: Zarejestrowani
Postów: 27
Pomógł: 0
Dołączył: 31.07.2006
Skąd: Czeladź

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


hmmm, narazie korzystam z domyslnych wygladow, dla selecta, checkboxa, oraz radio, ogolnie jak poustawiam style to sa male roznice,

i dla klienta to nie problem (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) hehe,

ale dzieki za wyjasnienie, zgadzam sie ze aby formularze zrobic podobne dla kazdej przegladarki jak sa pola jak wyzej, to jest porazka.



Mam kilka pytan (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
klasy i obiekty uzywam od jakiegos czasu, ale postanowilem wziasc sie porzadnie za to, i chce dobrze wszystko zrozumiec, i stosowac jak najlepiej (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
dlatego ponizej tego calego kodu, beda pytania (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) , mam nadzieje ze ktos odpowie (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
  1. <?php
  2. class form {
  3.  
  4.    #####################################################################
  5.    #    Klasa do generowania Formularzy                                    #
  6.    #                                                                    #
  7.    #####################################################################
  8.    
  9.    protected $enctype='multipart/form-data';
  10.    protected $method=array('post','get');
  11.    protected $action='';
  12.    protected $form=array('method'=>'','action'=>'','enctype'=>'','id'=>'','class'=>'','style'=>'');
  13.    public $elements=array();
  14.    
  15.    function __construct($method='post',$action='',$enctype=null,$id=null,$class=null,$style=null)
  16.    {
  17.        if (!in_array($method,$this->method)) die('bledny parametr method. Podaj: post lub get');
  18.        $this->form['method']=$method;
  19.        $this->action=$action;
  20.        if ($enctype) $this->setEnctype(1);
  21.        $this->form['id']=$id;
  22.        $this->form['class']=$class;
  23.        $this->form['style']=$style;
  24.    }
  25.    public function setEnctype($set=0)
  26.    {
  27.        if ($set) $this->form['enctype']=$this->enctype;
  28.            else $this->form['enctype']=null;
  29.    }
  30.    public function setAction($set='')
  31.    {
  32.        $this->action=$set;
  33.    }
  34.    public function setMethod($set='')
  35.    {
  36.        if (!in_array($set,$this->method)) die('bledny parametr method. Podaj: post lub get');
  37.        $this->form['method']=$set;
  38.    }
  39.    public function setId($set='')
  40.    {
  41.        $this->form['id']=$set;
  42.    }
  43.    public function setClass($set='')
  44.    {
  45.        $this->form['class']=$set;
  46.    }
  47.    public function setStyle($set='')
  48.    {
  49.        $this->form['style']=$set;
  50.    }
  51.    public function newInput($type='submit',$name='name',$value='value wyslij',$id=null,$style='style',$class='class',$onclick='return confirm('click');')
  52.    {
  53.        $this->elements[$name]=new input($type,$name,$value,$id,$style,$class,$onclick);
  54.    }
  55.    public function newInput2($type='submit',$name='name',$value='value wyslij',$id=null,$style='style',$class='class',$onclick='return confirm('click');')
  56.    {
  57.        return new input($type,$name,$value,$id,$style,$class,$onclick);
  58.    }
  59.  
  60.    public function generate()
  61.    {
  62.        $t='<form action="'.$this->action.'"';foreach($this->form as $id=>$val) $val?$t.=' '.$id.'="'.$val.'"':'';$t.='>';
  63.        $t.="r\n";
  64.        foreach ($this->elements as $id)
  65.            $t.=$id->generate();
  66.        $t.='</form>';
  67.        return $t;
  68.    }
  69.  
  70. }
  71.  
  72. class input {
  73.    
  74.    ################################################################################
  75.  
  76.    #    Klasa do generowania Input                                                    #
  77.    #    <input type="text" value="" name="" id="" style="" class="" onclick="">        #
  78.    ###########################################################################
  79. #####
  80.    
  81.    protected $field= array('type'=>'','name'=>'name','value'=>'','id'=>'','style'=>'','class'=>'','onclick'=>'');
  82.    protected $type= array('text','hidden','image','submit','checkbox','radio');
  83.    
  84.    function __construct($type='text',$name='name',$value='value',$id=null,$style=null,$class=null,$onclick=null)
  85.    {
  86.        if (!in_array($type,$this->type)) die('bledny parametr type. Podaj: text, hidden, image, lub submit');
  87.        $this->field['type']=$type;
  88.        $this->field['name']=$name;
  89.        $this->field['value']=$value;
  90.        $this->field['id']=$id;
  91.        $this->field['style']=$style;
  92.        $this->field['class']=$class;
  93.        $this->field['onclick']=$onclick;
  94.    }
  95.    /*Pobiera wartosci z field, jesli danej value nie ma. Sprawdza czy istnieje w field, jesli nie ma to killuje proces*/
  96.    public function __get($name){
  97.        if (!isset($this->field[$name]))
  98.            die('Brak danego pola w bazie które możesz wywołać $obiekt -> '.$name.'!<br/>');
  99.        else return $this->field[$name];
  100.    }
  101.  
  102.    /*Jesli nie ma danego pola, tworzy w tablicy nowe, i ustawia wartość*/
  103.    public function __set($name, $value){
  104.        if ($name=='type')
  105.            $this->setTyp($value);
  106.        else
  107.            $this->field[$name]=$value;
  108.    }
  109.  
  110.    public public function setTyp($type)
  111.    {
  112.        if (!in_array($type,$this->type)) die('bledny parametr type. Podaj: text, hidden, image, lub submit');
  113.        $this->field['type']=$type;
  114.    }
  115.    public function generate()
  116.    {
  117.        $t='<input ';foreach($this->field as $id=>$val) $val?$t.=$id.'="'.$val.'" ':'';$t.='/>';
  118.        $t.="r\n";
  119.        return $t;
  120.    }
  121.    
  122. }
  123.  
  124.  
  125.    $form=new form($method='post',$action='aa',$enctype=1,$id='id',$class='c',$style='s');
  126.    $form->setEnctype(1);
  127.    $form->setAction('');
  128.    $form->setMethod('post');
  129.    $form->setId('identyfikator');
  130.    $form->setClass('class');
  131.    $form->setStyle('style');
  132.    
  133.    $form->elements['input1']=new input($type='text',$name='name1',$value='value wyslij',$id='id',$style='style',$class='class',$onclick='');
  134.    $form->elements['input1']->id='nowe_id';
  135.    $form->elements['input2']=new input($type='submit',$name='name2',$value='value wyslij',$id=null,$style='style',$class='class',$onclick='return confirm('click');');
  136.    $form->newInput($type='submit',$name='name3',$value='value wyslij',$id=null,$style='style',$class='class',$onclick='return confirm('click');');
  137.    $form->elements['name3']->id='test';
  138.    $form->elements['input4']=$form->newInput2($type='radio',$name='name4',$value='value wyslij',$id=null,$style='style',$class='class',$onclick='return confirm('click');');
  139.    $form->elements['input4']->class='klasa';
  140.    
  141.    echo $form->generate();
  142. ?>

Wynik:
  1. <form action="" method="post" enctype="multipart/form-data" id="identyfikator" class="class" style="style">
  2. <input type="text" name="name1" value="value wyslij" id="nowe_id" style="style" class="class" />
  3. <input type="submit" name="name2" value="value wyslij" style="style" class="class" onclick="return confirm('click');" />
  4. <input type="submit" name="name3" value="value wyslij" id="test" style="style" class="class" onclick="return confirm('click');" />
  5. <input type="radio" name="name4" value="value wyslij" style="style" class="klasa" onclick="return confirm('click');" />
  6. </form>


Zaczne od konca (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)

Zdefiniowalem klase input,
field, i type jest protected, stosuje funkcje __get, oraz __set do ustawiania pol field, praktyczne to jest?
funckje generate() - zwracaja kod html.

wywolanie funkcji input:

$c=new input($type='text',$name='name1',$value='value wyslij',$id='id',$style='style',$class='class',$onclick='');
$c->id='nowe_id';
echo $c->generate();

w konstruktorze ustawiam najwazniejsze rzeczy (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) , reszte mozna ustawic poprzez:
$c->id, $c->value itp,
stosuje sie takie cos? dla mnie ladnie to wyglada (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg) ale nie wiem jeszcze czy to jest praktyczne (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) . Chcialem zawezic funckcje magiczne tylko dla pol fields ale chwilowo to pominalem (musialbym dac wszystkie mozliwe pola jakie input moze posiadac).

funckją setTyp($value) ustawiam type inputa, przez oddzielna funkcje, poniewaz trzeba miec kontrole akurat nad tym jednym polem (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)


A teraz klasa Form,

jak w klasie input, najwazniejsze parametry ustawiam poprzez konstruktor,
nastepnie kazda opcje formularza mozna ustawic tylko przez metody do tego stworzone (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)

mam tutaj glownie pytania, jak tworzyc nowe pola w takim formularzu (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)

dalem 4 sposoby:

  1. <?php
  2. $form->elements['input1']=new input($type='text',$name='name1',$value='value wyslij',$id='id',$style='style',$class='class',$onclick='');
  3.    $form->elements['input1']->id='nowe_id';
  4.    $form->elements['input2']=new input($type='submit',$name='name2',$value='value wyslij',$id=null,$style='style',$class='class',$onclick='return confirm('click');');
  5.    $form->newInput($type='submit',$name='name3',$value='value wyslij',$id=null,$style='style',$class='class',$onclick='return confirm('click');');
  6.    $form->elements['name3']->id='test';
  7.    $form->elements['input4']=$form->newInput2($type='radio',$name='name4',$value='value wyslij',$id=null,$style='style',$class='class',$onclick='return confirm('click');');
  8.    $form->elements['input4']->class='klasa';
  9. ?>

jak trzeba wyjasnien do tych sposobow napiszcie, a wyjasnie (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) najbardziej optymalna wedlug mnie jest metoda z input4[name4]
Go to the top of the page
+Quote Post

Posty w temacie
- Tarcil   [PHP] Klasa formular   23.01.2009, 13:07:30
- - bim2   Ok, ok a do czego twoim zdaniem w tym wypadku będz...   23.01.2009, 15:53:00
- - Crozin   @bim2: class Field extends Form? Eeee... a co to m...   23.01.2009, 16:24:17
- - bim2   Hmm, inputy należą do forma. Można by znać indetyf...   23.01.2009, 17:36:07
- - pinochet   Tez cos takiego pisalem ale nie dopisalem pozatym ...   23.01.2009, 18:43:24
- - Tarcil   Jak pisałem, zaczynam się bawić w oop. Obiekt form...   24.01.2009, 11:43:23
- - Black-Berry   Z doświadczenia moge powiedziec ze lepiej sprawdza...   29.01.2009, 14:49:25
- - WaterIntelligence   Ostatnio zaprojektowałem klasy formularzy, które p...   2.02.2009, 11:38:28
- - Tarcil   Dzięki za porady Teraz muszę skończyć jedno pseu...   4.02.2009, 11:16:58
- - Black-Berry   Jeśli o mnie chodzi to czekam z niecierpliwośćią b...   4.02.2009, 13:50:00
|- - chiken   Cytat(Black-Berry @ 4.02.2009, 13:50...   14.02.2009, 14:13:26
|- - Black-Berry   Cytat(chiken @ 14.02.2009, 14:13:26 )...   14.02.2009, 14:50:52
- - chiken   hmmm, narazie korzystam z domyslnych wygladow, dla...   14.02.2009, 22:59:48
- - bim2   troche dzina konstrukcja, moim zdaniem powinno to ...   15.02.2009, 14:07:16
- - chiken   z definiowaniem klasy form, sie zgadzam, jeszcze u...   15.02.2009, 17:37:02
- - bim2   ale oczywiscie, html elements ma miec tylko dane r...   15.02.2009, 17:39:00
- - chiken   hmmm, a nie lepiej tworzyc obiekty w klasie html_e...   15.02.2009, 17:46:39
- - Black-Berry   Idealnie powinno być tak: [PHP] pobierz, plaintex...   15.02.2009, 18:10:24
- - chiken   dzieki za nakierowanie, wlasnie cos podobnego plan...   15.02.2009, 18:29:44
- - bim2   Ale co za prbolem z validacją? Validacja w tych kl...   15.02.2009, 20:19:32
|- - Black-Berry   Cytat(bim2 @ 15.02.2009, 20:19:32 ) A...   15.02.2009, 21:04:15
- - Whisller   Jakiś czas temu (od wersji 1.21.1 pomyliły mi się ...   15.02.2009, 21:19:12
- - Black-Berry   @bim2 Idea fajna ale z punktu widzenia profesjonal...   15.02.2009, 21:20:07
- - bim2   Ni potrzeba frameworka. Parsuje pregami fdokument ...   15.02.2009, 22:55:22
- - chiken   jak dla mnie ze tak powiem zamotane, powinno sie...   15.02.2009, 22:57:22
- - Black-Berry   Trochę tak. Zasada minimalizmu zawsze się opłaca:/   15.02.2009, 23:52:03
- - bim2   No nie wiem, bardzo ładnie działa i dodanie kolejn...   16.02.2009, 15:36:06
|- - chiken   Cytat(bim2 @ 16.02.2009, 15:36:06 ) N...   16.02.2009, 21:53:27
- - destroyerr   Oczywiście symfony ma formularze w obecnej postaci...   16.02.2009, 15:41:50
- - Crozin   @chlken: checkJavascript() to pewnie coś co genere...   17.02.2009, 08:18:00
- - chiken   no musiialem nie doczytac hehe   17.02.2009, 08:23:51


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

 



RSS Aktualny czas: 3.10.2025 - 23:05