Formularklasse

ms92

Mitglied
Hallo,
ich wollte mal fragen, wie ihr meine Klasse zur Erstellung von Formularen findet.
Sie ist noch nicht ganz fertig und leider funktioniert auch eine SAche nicht, ICh wollte auch nur wissen, ob ihr die Ansätze gut findet, also so die Grundidee. Oder sollte man das komplett anders machen. DAs Problem ist, dass die Funktion attr_write iwie nicht so funktioniert, wie es eigentlich sein sollte. Ich bin nicht so gut in OO programmieren.
mfg

Hier der Code:
PHP:
class form {
		private $form_head;
		private $form_body;
		private $form_footer;
		function attr_write($write_in,$attr){
			foreach($attr as $key=>$val){
				$write_in .= $key.'="'.$val.'" ';
			}	
		}
		function __construct($form_head){
			$this->form_head = '<form ';
			$this->attr_write($this->form_head,$form_head);
			$this->form_head .= '>';
			$this->form_footer = '</form>';
		}
		function fieldset($attr,$legend=""){
			$this->form_head .= "<fieldset ";
			$this->write($this->form_head,$attr);
			$this->form_head .= " />";
			if($legend){
				$this->form_head .= '<legend>'.$legend.'</legend>';	
			}
			$this->form_footer = '</fieldset>'.$this->form_footer;
		}
		function add($input_typ,$attr){
			if($input_typ == "text" OR $input_typ == "password"){
				$this->form_body .= '<input type="'.$input_typ.'" ';	
				$this->attr_write($this->form_body,$attr);
				$this->form_body .= ' />';
			}
		}
		function create_form(){
			echo $this->form_head.$this->form_body.$this->form_footer;
		}
	}
 
Naja, um ehrlich zu sein sehe ich keine große Verbesserung gegenüber selbst schreiben. Da könnte mehr drinn sein. Ein paar Vorschläge
Erstelle Klassen für die einzelnen Formularelemente (Text, Password, Select, usw...), die alle von einer abstrakten Basisklasse Form_Element_Abstract erben und die man über add() hinzufügen kann.

Statt $input_typ == 'text' sollte man für jeden symbolischen String Konstanten implementieren und dann $input_type == self::TYPE_TEXT oder so schreiben.

Wenn du schon PHP 5 nutzt könntest du ja auch ein paar magische Methoden implementieren. Wie wäre es mit __set um Attribute zu setzen. Auch die __toString Methode wäre nett.

Auch interessant wären unterschiedliche Doctypes, ist aber letztlich eine Spielerei.

Noch ein Idee für Version 2 wäre dann, wie bei Quickform eine Prüfung der Formulareingaben.

Sind alles nur Ideen, wenn dir für deine Zwecke deine jetztige Klasse reicht kannst du sie ruhig verwenden.
 
hm.. es soll eigentlich auch noch in die methode add was dazu kommen (select, textfield etc.). Ich versteh dich leider nicht... Ich bin noch nicht so gut in Objektorientierter Programmierung und wollte hiermit mal anfange, weil ich dachte, dass so was vielleicht nützlich ist, da man ja oft Formulare braucht.
Kannst du mir vielleicht nochmal erklären, was du meinst mit diesen einzelenen KLassen für die verschiedene Elemente und der Methode __set und __tostring. Wo soll ich diese Methoden einsetzen?
Oder meinst du ich sollte diese von dir erwähnte Quickform-Klasse nutzen? Oder gleich dieses CakePHP? Ich hab gehört, dass es damit viel leichter sei strukturiert zu arbeiten.
Es ist nicht so, dass ich nix von PHP verstehe, nur eben vom Objektorientieren PRogrammieren noch nicht so viel...
mfg
 
Macht überhaupt nichts, jeder fängt einmal klein an. Ich meinte auch nicht das du die Quickform Klasse nutzen solltest, nur durch selbstständiges Programmieren lernt man auch etwas dazu.

Also __set und __toString gehören wie __construct zu den magischen Methoden (vielleicht kennst du auch die magischen Konstanten __FILE__ oder auch __LINE__). Diese Methoden haben einen bestimmten Sinn: __set wird immer aufgerufen wenn du auf eine Eigenschaft zugreifen (Schreibzugriff) willst die nicht existiert. Diese Methode wird (in Verbindung zu __get) oft im ActiveRecord Pattern genutzt, um Datenbanken abzubilden. __get wird immer aufgerufen wenn du auf eine Eigenschaft lesend zugreifen willst, und sie nicht existiert.
__toString wird aufgerufen wenn du versuchst ein Objekt zu einem String zu casten, also auch wenn du es mit echo oder print ausgibst.
 
ja, okay, danke.
aber wie könnte ich das jetzt sinnvoll in meiner KLasse nutzen?
Und was meintest du damit:
Statt $input_typ == 'text' sollte man für jeden symbolischen String Konstanten implementieren und dann $input_type == self::TYPE_TEXT oder so schreiben.
gruß
ms92
 
Zurück