php.de

Zurück   php.de > Webentwicklung > PHP-Fortgeschrittene

PHP-Fortgeschrittene Arbeiten mit PHP ohne Einschränkungen

Antwort
 
LinkBack Themen-Optionen Thema bewerten
Alt 02.05.2011, 11:39  
Benutzer
 
Registriert seit: 18.06.2009
Beiträge: 42
PHP-Kenntnisse:
Fortgeschritten
Leichti befindet sich auf einem aufstrebenden Ast
Standard Formulare - per Hand oder dynamisch?

Hallo!
Ich beschäftige mich schon seit einiger Zeit (Hobbymässig) mit PHP. Nun bin ich gerade an einem neuen Projekt, und habe soweit es möglich ist die Pattern von Stephan Schmid für den FrontController und die Commands usw übernommen, bzw ein wenig umgeschrieben. Bin mit meiner Arbeit bisher sehr zufrieden.

Jetzt kommen erstmals Formulare ins Spiel. Bisher habe ich die immer per Hand mit HTML geschrieben, allerdings bilde ich mir ein, ich hätte das schon deutlich besser gesehen

Macht es Sinn die Formulare per Hand in eine Template Datei zu tippen, oder sollten diese dort über Klassen dynamisch erzeugt werden können? "Tippt" hier überhaupt jemand die Formulare selbst?

Ich wäre für einige Denkanstöße und Tipps sehr Dankbar!

mfg
Leichti ist offline   Mit Zitat antworten
Sponsor Mitteilung
PHP Code Flüsterer

Registriert seit: 21.08.2005
Beiträge: 4682
PHP-Kenntnisse:
Fortgeschritten

Alt 02.05.2011, 11:46  
Moderator
 
Benutzerbild von Chriz
 
Registriert seit: 11.05.2008
Beiträge: 6.268
Chriz ist ein wunderbarer AnblickChriz ist ein wunderbarer AnblickChriz ist ein wunderbarer AnblickChriz ist ein wunderbarer AnblickChriz ist ein wunderbarer AnblickChriz ist ein wunderbarer AnblickChriz ist ein wunderbarer Anblick
Standard

Hallo,

ich benutze Formularobjekte. Vielleicht ist das ja eine Inspiration für dich:
http://framework.zend.com/manual/en/zend.form.html

Die Ausgabe eines Formularobjektes erfolgt dann über Decorator.
__________________
"Nuschel ich?" - "Was?"
Chriz ist offline   Mit Zitat antworten
Alt 02.05.2011, 13:31  
Erfahrener Benutzer
 
Registriert seit: 30.07.2008
Beiträge: 1.167
PHP-Kenntnisse:
Fortgeschritten
xm22 sorgt für eine eindrucksvolle Atmosphärexm22 sorgt für eine eindrucksvolle Atmosphärexm22 sorgt für eine eindrucksvolle Atmosphäre
Standard

Das ist eine Frage des Geschmacks. Ich persönlich benutze zwar auch immer noch Formular-Klassen ähnlich Zend_Form, da man dann eine Validierung und Fehlerbehandlung i. d. R. automatisch mit geliefert bekommt.

Der Nachteil ist allerdings, dass man bei der Ausgabe relativ eingeschränkt ist, wenn man dann nicht an diversen Renderern/Dekoratoren selber Hand anlegen will. Das ist allerdings nicht allzu häufig notwendig.

Bei optisch sehr komplexen Formularen ist es aber schon vorgekommen, dass ich auf der einen Seite ein Formular-Objekt hatte, dass die Validierung übernahm und auf der anderen Seite den entsprechenden HTML-Code per Hand geschrieben habe.

Es lohnt ebenfalls nicht, für ein Formular mit ein oder zwei Feldern extra einen Formular-Generator zu bemühen.

Es ist halt immer eine Frage von Aufwand und Nutzen. Prinzipiell bin ich allerdings pro Formular-Generatoren.
xm22 ist offline   Mit Zitat antworten
Alt 02.05.2011, 13:44  
Moderator
 
Benutzerbild von Chriz
 
Registriert seit: 11.05.2008
Beiträge: 6.268
Chriz ist ein wunderbarer AnblickChriz ist ein wunderbarer AnblickChriz ist ein wunderbarer AnblickChriz ist ein wunderbarer AnblickChriz ist ein wunderbarer AnblickChriz ist ein wunderbarer AnblickChriz ist ein wunderbarer Anblick
Standard

Ich geb dir absolut recht, dass es nicht ganz einfach ist, ein Formular dynamisch zu halten, es aber gleichzeitig auch frei anzupassen (für die Ausgabe).

Beim ZF ist es allerdings so, dass es a) möglich, wenn auch kompliziert ist und b) du dafür auch Eingabefelder als Objekte verpackst. Somit kannst du jederzeit soetwas bauen:
PHP-Code:
<?php
$form 
= new MyUserNameForm(); // extends Zend_Form
if ($form->isValid($_POST)) {
  
$values $form->getValues();
  
// ..
}
?>
<form action="<?php echo htmlspecialchars($form->getAction()); ?>">
  Dein Name ist
  <?php
  
echo $form->getElement("username")
    ->
setStyle("border:1px dashed silver;border-width:0 0 1px 0")
    ->
render();
  
?>
  und du solltest jetzt OK drücken:
  <hr />
  <?php echo $form->getElement("submitBtn")->render(); ?>
</form>
Wenn die Decorator aber einmal verstanden und angepasst wurden, erleichtert es dir wahnsinnig viel Arbeit.
__________________
"Nuschel ich?" - "Was?"
Chriz ist offline   Mit Zitat antworten
Alt 02.05.2011, 13:50  
Moderator
 
Benutzerbild von cycap
 
Registriert seit: 13.02.2008
Beiträge: 6.816
PHP-Kenntnisse:
Fortgeschritten
cycap ist einfach richtig nettcycap ist einfach richtig nettcycap ist einfach richtig nettcycap ist einfach richtig nettcycap ist einfach richtig nett
Standard

Ich hab in einem Projekt einen Formular-Generator der eigentlich nur JS generiert und mit Hilfe von ExtJS wird daraus ein Formular mit doch deutlich mehr Möglichkeiten als bei reinem HTML. Aber wie meine Vorredner schon sagten, es ist doch stark Geschmacks- und Projektabhängig.
cycap ist offline   Mit Zitat antworten
Alt 02.05.2011, 13:57  
Benutzer
 
Registriert seit: 18.06.2009
Beiträge: 42
PHP-Kenntnisse:
Fortgeschritten
Leichti befindet sich auf einem aufstrebenden Ast
Standard

Vielen Dank schonmal für eure Antworten.

Ich habe mir den Formular Generator vom ZF angeschaut, und hatte selbst schon Überlegungen in diese Richtung. An eine automatische Validierung dachte ich nicht, bin allerdings gerade dabei es ähnlich umzusetzten (Auf einem guten Weg).

Für mich stellt sich dann nur immer wieder die Frage wo binde ich solche Sachen am besten ein? Direkt in einem Command? (Mache ich derzeit zum testen so
PHP-Code:
        $form = new Form("""post");
        
        
$element = new InputElement("standartElement""text");
        
$element->setAttr("size"12)
                        ->
setAttr("class""formInput");        
        
        
$valiador = new StringCheckOperator(010"/[^a-zA-Z0-9]{1,}/");

        
$element->addValiador($valiador);
                        
        
$element->setAttr("name""username")
                ->
setAttr("type""text")
                ->
addToForm($form);
                
        
$element->setAttr("name""pass")
                ->
setAttr("type""password")
                ->
addToForm($form);
            
        
$element->setAttr("name""submitted")
                ->
setAttr("type""submit")
                ->
setAttr("value""absenden")
                ->
addToForm($form);
        
        
$form->valid($request);
        echo 
$form->get(); 
Ist alles nur ein wenig herumprobieren. Angenommen das wäre mein "fertiges Formular" (Normal steht in dieser Stelle kein echo), wo platziere ich diesen Code am Sinnvollsten? Einmal soll das Objekt erstellt werden um mit ->get() bzw ->render() erstellt zu werden, nach dem absenden sollte aber mit valid() geprüft werden, ob die parameter im $request konform mit meinen validatoren sind.
Wäre hier das Decorator Pattern angebracht? Was macht dieses dann nochmal genau?


edit: Die Darstellung der Formulare soll nicht zwingend komplex sein, ich bin ein Freund von schlichten Sachen, in meinem aktuellen Projekt geht es eigentlich nur um Eingabefelder für Kommentare, Berichte und Ähnliches
Vielen Dank nochmals!
Leichti ist offline   Mit Zitat antworten
Alt 02.05.2011, 18:13  
Erfahrener Benutzer
 
Registriert seit: 30.07.2008
Beiträge: 1.167
PHP-Kenntnisse:
Fortgeschritten
xm22 sorgt für eine eindrucksvolle Atmosphärexm22 sorgt für eine eindrucksvolle Atmosphärexm22 sorgt für eine eindrucksvolle Atmosphäre
Standard

Zitat:
Direkt in einem Command?
Was soll das sein?

Übrigens baut man einen Baum von der Wurzel her auf. Das heißt: Nicht
$element->addToForm($form);
sondern
$form->addElement($element);

Wo Du diesen Code letztendlich einbaust, hängt von Deiner Applikation ab. Du erkennst vielleicht, dass Du hier einen Teil der View-Schicht mit einem Teil der Business-Logik verbindest. Daher ist das nicht ganz einfach zu sagen. In einer MVC-Applikation würde ich das Formular in einer Klasse generieren und an das View übergeben, das dann festlegt, an welcher Stelle das Menü angezeigt wird.
xm22 ist offline   Mit Zitat antworten
Alt 02.05.2011, 18:51  
Benutzer
 
Registriert seit: 18.06.2009
Beiträge: 42
PHP-Kenntnisse:
Fortgeschritten
Leichti befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Was soll das sein?
Bei mir ruft der Front Controller ein "Command" auf, dieses Command verarbeitet den Request, also $_POST und $_GET, ladet ein Template und übergibt diesem die Variablen. Würdest du es da hinpacken?

Zitat:
Übrigens baut man einen Baum von der Wurzel her auf. Das heißt: Nicht
$element->addToForm($form);
sondern
$form->addElement($element);
Wird im Prinzip auch so gemacht, die Methode addToForm ruft genau dieses addElement($this) auf. Vorteil wenn ichs hier ausnahmsweise so mache, ich brauch nicht jedes mal ein neues Element erstellen, sondern bearbeite nur die Eigenschaften, welche sich von Element zu Element ändern. Sollte ich das trotzdem ändern?


Zitat:
Daher ist das nicht ganz einfach zu sagen. In einer MVC-Applikation würde ich das Formular in einer Klasse generieren und an das View übergeben, das dann festlegt, an welcher Stelle das Menü angezeigt wird.
Ich habe jetzt eine Klasse geschrieben, welche sich in einem unterornder meiner ganzen Form Klassen (Form, InputElement etc.) befindet, und diese "facade" genannt. (Keine Ahnung ob ich wirklich dieses Pattern anwende)
Hier habe ich beispielsweise eine Klasse welche LoginFacade

PHP-Code:
class LoginFacade implements IFormFacade
{
    private 
$form;
    
    public function 
__construct()
    {
        
$this->createForm();
    }
    
    private function 
createForm()
    {
        
$this->form = new Form("""post""Login");
        
        
$element = new InputElement("standartElement""text");
        
$element->setAttr("size"12)
                        ->
setAttr("class""formInput");        
        
        
$valiador = new StringCheckOperator(315"/[^a-zA-Z0-9]{1,}/");

        
$element->setValiador($valiador);
                    
        
$element->setAttr("name""username")
                ->
setAttr("type""text")
                ->
setAttr("desc""Login")
                ->
setPermanent(true)
                ->
addToForm($this->form);

        
$valiador->setLength(640);        
        
$element->setValiador($valiador);        
                
        
// hab hier den rest einfach abgeschnitten, werden nur noch 2 weitere Felder erstellt.
    
}
    
    public function 
render()
    {
        return 
$this->form->get();
    }

    public function 
__call($method$args)
    {
        
        
$test call_user_func_array(array($this->form$method), $args);
        return 
$test;
    } 
Und mein Login "Command" ruft diese Klasse jetzt auf, wobei ich immer noch ein wenig flexibel bin und die Klasse Form sowie die einzelnen Elemente ändern kann. (Oder?)

PHP-Code:
class LoginCommand implements ICommand
{
    public function 
execute(IRequest $requestIResponse $responseITemplateView $template)
    {
        
$template->setTemplate("login");
        
        
// LoginCheck
        
$form = new LoginFacade();
        
        
// Do we not have a submit? Or is the form InValid?
        
if(!$form->isSubmitted($request) or !$form->isValid($request))
        {
            
$template->assign("loginForm"$form->render());
            
$template->render($request$response);

            return;
        }

        
/// usw....
    
}

Ich weis ich hab hier jetzt sehr viel Code geschrieben, ich hoffe es ist für euch einigermaßen verständlich. Wie würdet ihr das bewerten? Ist das so OK, oder total daneben? Für mich ist OOP immernoch total ungewohnt, ich falle gerne in alte Muster zurück und benutze Klassen gerne einzig und allein um gewisse Codestücke mehrmals verwenden zu können (Habe ich früher immer so gemacht).

Vielen Dank nochmals
Leichti ist offline   Mit Zitat antworten
Alt 02.05.2011, 22:52  
moderatives Dielektrikum
 
Benutzerbild von nikosch
 
Registriert seit: 21.05.2008
Beiträge: 35.987
PHP-Kenntnisse:
Fortgeschritten
nikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunft
Standard

Zitat:
Übrigens baut man einen Baum von der Wurzel her auf. Das heißt: Nicht
$element->addToForm($form);
sondern
$form->addElement($element);
Da gibt es durchaus verschiedene Meinungen zu.*) Z.B. ist es auch eine Frage, welche Elemente welchen zugeordnet werden. HTML-seitig gehören Elemente immer zum Form, aus Logiksicht könnte das im Prinzip aber auch anders sein, z.B. ein Select, das man jedem Form zuordnet, das einen bestimmten DB-Datensatz ändert o.ä. Aus PHP-Sicht ist es ja hier icht zwingend nötig, das Objekt zu klonen, solange die Eigenschaften immer gleich sind.
Zitat:
Vorteil wenn ichs hier ausnahmsweise so mache, ich brauch nicht jedes mal ein neues Element erstellen, sondern bearbeite nur die Eigenschaften, welche sich von Element zu Element ändern.
Das allerdings ist ein Fehler, denn solange Du Objekte nicht klonst, änderst Du immer alle Referenzen auf die jeweilige Instanz, auch wenn Du sie irgendwohin zugewiesen hast o.ä.

*) Krass, habs direkt noch gefunden! http://stackoverflow.com/questions/2...-in-a-haystack
__________________
--
One pixel is still too big. Please make it smaller. ASAP.

Initiative Mittelstand.
Die wichtigste Gestaltungsregel im Screendesign ist Pi mal Daumen des Arbeitgebers.
--
nikosch ist offline   Mit Zitat antworten
Alt 03.05.2011, 09:14  
Benutzer
 
Registriert seit: 18.06.2009
Beiträge: 42
PHP-Kenntnisse:
Fortgeschritten
Leichti befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von nikosch Beitrag anzeigen
Das allerdings ist ein Fehler, denn solange Du Objekte nicht klonst, änderst Du immer alle Referenzen auf die jeweilige Instanz, auch wenn Du sie irgendwohin zugewiesen hast o.ä.
Aus diesem Grund wird ein Element dann folgendermaßen zugewiesen
PHP-Code:
$this->elements[$element->getName()] = clone $element
Hat dieses klonen irgendwelche Nachteile?
Leichti ist offline   Mit Zitat antworten
Antwort


Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an
Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
[Erledigt] Zwei Formulare in einer Seite <?=david?> PHP Tipps 2009 6 21.09.2009 16:31
Dynamisch Ordner erstellen und Dynamisch Bilderordner auslesen timmeyy PHP Tipps 2009 9 22.06.2009 09:13
Formulare (Benutzer-Profil) aus MySQL generieren stockholm PHP-Fortgeschrittene 2 18.12.2008 14:11
Inhalte / Layer zeitgesteuert dynamisch ändern goodieboy PHP Tipps 2008 7 10.11.2008 15:28
PHP: Dynamisch erzeugte Buttons auslesen SvenLittkowski PHP Tipps 2008 9 29.10.2008 10:36
Javaskript klappmenü dynamisch mit PHP Schubbcasten PHP Tipps 2008 9 15.07.2008 15:45
gehackte Formulare seb-web PHP-Fortgeschrittene 50 01.08.2006 15:59
tabelle... dynamisch etc.. goelliboy HTML, Usability und Barrierefreiheit 1 25.07.2006 01:09
Serverzeit dynamisch wiedergeben Rockmaster PHP Tipps 2006 4 19.02.2006 19:34
Formulare verschachteln R4v3r HTML, Usability und Barrierefreiheit 8 16.01.2006 11:09
dynamisch erstellte Formularfelder mit POST übergeben RoDa PHP Tipps 2005-2 3 19.06.2005 12:41
Uploadfelder dynamisch erzeugen und abfragen PHP Tipps 2005-2 1 03.06.2005 23:01
Variablenname dynamisch zusammensetzen RoDa PHP Tipps 2004 3 19.09.2004 14:13
Dynamisch erstellte Variablen ansprechen PHP Tipps 2004 2 08.08.2004 20:15

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
dynamische form action zusammenbauen, command-pattern commands schachteln oop, zend controller dynamisch generierte buttons, zend form komplexes html, formular action zusammenbauen, extjs formulare komplex prinzip, dynamisch erzeugtes formular auslesen php array, extjs dynamisch formulare ändern, zend form erstellte elemente aus elementen klasse, extjs formulare dynamisch, formular dynamisch in php zusammenbauen, tabelle um zend form bauen, developer-tool für formulare, \html-code mit hand geschrieben\, eingabeformular ausgabe selbes formular php, zend formular dynamisch, php dynamisch formular vorlage

Alle Zeitangaben in WEZ +2. Es ist jetzt 00:50 Uhr.




Powered by vBulletin® Version 3.7.2 (Deutsch)
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0
Aprilia-Forum, Aquaristik-Forum, Liebeskummer-Forum, Zierfisch-Forum, Geizkragen-Forum