php.de

Zurück   php.de > Webentwicklung > Software-Design

Software-Design Diskussionen auf Profi-Niveau: PHP Lösungen auf konzeptioneller Ebene

Antwort
 
LinkBack Themen-Optionen Thema bewerten
Alt 30.12.2008, 20:37  
Erfahrener Benutzer
 
Registriert seit: 06.09.2008
Beiträge: 189
#Avedo befindet sich auf einem aufstrebenden Ast
Standard

Hallo!
Danke für die tolle Hilfe. Wenn ich das nun richtig verstanden habe, Repräsentiert die Formular-Klasse nach der Eingabe das eigentliche HTML-Formular. Man sagt ihr also welche Formularfelder es gibt, welche also später ankommen müssen und wie diese dann validiert werden müssen. So ist es also möglich nach dem Absenden des Formulars das Übergabe Array einfach an die Formularklasse zu übergeben, welche dann überprüft, ob alle Felder, die vorgegeben wurden auch wirklich ausgefüllt sind. Danach werden diese Felder mit Hilfe des angegebenen Validators valdiert. Treten Fehler auf werden diese felderweise in einem Array gespeichert, sodass es zum Beispiel möglich ist, direkt über die entsprechenden Felder die jeweiligen Fehölermeldungen zu schreiben. Habe ich ds alles so richtig verstanden?

Mich würde jetzt allerdings noch etwas interessieren. Du meintest es ist möglich sich von einer solchen Klasse auch gleich das Formular erstellen zu lassen. Mich würde interessieren, wie man im allgemeinen HTML-Ausgaben von PHP-Klassen generieren lassen sollte. Ich habe mich nämlich bisher immer an die Norm, so wenig HTML wie möglich (am besten keins) in PHP-Klassen zu verwenden. Allerdings ist es ja schon ganz praktisch, wenn man zum Beispiel Daten aus einer Datenbank tabellarisch darstellen möchte, dies via
PHP-Code:
<?php
    
// set error-reporting
    
error_reporting(E_ALL);

    
// include class to create tables
    
require_once('Table.php');

    
// instance class
    
$tab = new Table($mysqli$table$fields);

    
// set css class of table
    
$tab->class 'datatab';

    
// set width of table in px
    
$tab->width 500;

    
// print out data table
    
print $tab;
?>
zu tun. Eine tägliche Anwendung, die wenn man dies immer und immer wieder Programmieren muss, unnötigen Code produziert und zudem unheimlich nervig ist. Kann mir jemand sagen, wie man solche Ausgaben am geschicktesten in eine Klasse verpackt?

Vielen Dank nochmal für eure Hilfe. Dies ist wirklich ein tolles Forum mit einer netten Community und sehr kompetenter Hilfe. Trifft man leider heutzutage nur noch sehr selten. Großes Lob an die verantwortlichen. Freue mich auf eure Antworten.

MfG, Andy
__________________
I'm so tired of slitting the throats of people calling me a violent psychopath.
#Avedo ist offline   Mit Zitat antworten
Sponsor Mitteilung
PHP Code Flüsterer

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

Alt 30.12.2008, 21:33  
Supermoderator HD
 
Benutzerbild von Manko10
 
Registriert seit: 16.03.2008
Beiträge: 8.425
PHP-Kenntnisse:
Fortgeschritten
Manko10 hat eine strahlende ZukunftManko10 hat eine strahlende ZukunftManko10 hat eine strahlende ZukunftManko10 hat eine strahlende ZukunftManko10 hat eine strahlende ZukunftManko10 hat eine strahlende ZukunftManko10 hat eine strahlende ZukunftManko10 hat eine strahlende ZukunftManko10 hat eine strahlende ZukunftManko10 hat eine strahlende ZukunftManko10 hat eine strahlende Zukunft
Standard

Zitat:
Ich habe mich nämlich bisher immer an die Norm, so wenig HTML wie möglich (am besten keins) in PHP-Klassen zu verwenden.
Ich denke, das Problem ist weniger das HTML in einer PHP-Datei, sondern vielmehr das HTML an der falschen Stelle.
Solange alles gut gekapselt ist und ausgabespezifische Elemente wirklich nur in geordneter und wiederverwendbarer Weise in View-Komponenten, die als Templates fungieren, enthalten sind, stellt dies nicht das Problem dar.
Es ist auch durchaus möglich, die HTML-Teile in Templates abzulegen und dann per PHP in einem DOM-Baum zusammenzufügen. Dabei hast du ähnlich wie in XSLT verschiedene Einzeltemplates, die in den Baum eingefügt werden.
__________________
Refining Linux Advent Calendar series “24 Outstanding ZSH Gems
Manko10 ist offline   Mit Zitat antworten
Alt 30.12.2008, 21:51  
Moderator
 
Benutzerbild von robo47
 
Registriert seit: 03.09.2004
Beiträge: 11.798
PHP-Kenntnisse:
Fortgeschritten
robo47 ist ein wunderbarer Anblickrobo47 ist ein wunderbarer Anblickrobo47 ist ein wunderbarer Anblickrobo47 ist ein wunderbarer Anblickrobo47 ist ein wunderbarer Anblickrobo47 ist ein wunderbarer Anblickrobo47 ist ein wunderbarer Anblickrobo47 ist ein wunderbarer Anblick
Standard

Auch wenn du vorher meintest dass das Zend Framework für dich nicht in Frage, schau dir vielleicht einfach mal die komplette Komponente Zend_Form an, dort ist das ja umgesetzt. Die Zend_Form_Element_* sind dabei die Formular-Elemente dort kannst du direkt schauen wie der Code zusammengesetzt wird und soweiter.
robo47 ist offline   Mit Zitat antworten
Alt 30.12.2008, 23:55  
Moderator und Wett-König
 
Benutzerbild von dr.e.
 
Registriert seit: 21.05.2008
Beiträge: 3.633
PHP-Kenntnisse:
Fortgeschritten
dr.e. ist ein Lichtblickdr.e. ist ein Lichtblickdr.e. ist ein Lichtblickdr.e. ist ein Lichtblickdr.e. ist ein Lichtblickdr.e. ist ein Lichtblick
dr.e. eine Nachricht über Skype™ schicken
Standard

Zitat:
Du meintest es ist möglich sich von einer solchen Klasse auch gleich das Formular erstellen zu lassen.
It depends on the concept. Klassen der View- bzw. UI-Schicht dürfen sicher HTML generieren. Was die Tabelle angeht, so kann man das relativ einfach generisch abbilden um (Datenbank-)Tabellen bzw. Listen auszugeben. Man könnte ein Iterator-Tag basteln, dass eine Liste von Objekten mit seinen Attributen in einer Tabelle ausgibt.

Zitat:
Kann mir jemand sagen, wie man solche Ausgaben am geschicktesten in eine Klasse verpackt?
Schau dir den Anwendungsfall an und versuche dann aus der Lösung für diesen Fall einen allgemeingültigen abzuleiten. Es kann sinnvoll sein, ein assoziatives Array ausgeben zu können oder wie oben beschrieben eine Liste von Objekten. Sofern du beides ermöglichst, hast du bereits eine Allzweckwaffe. Konfigurationstechnisch sollte die Ausgabe per CSS formatierbar sein (z.B. die verwendeten Klassen mit einem übergebenen Prefix austatten), dann bist du frei in der Verwendung.
__________________
Viele Grüße,
Dr.E.

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1. Think about software design before you start to write code!
2. Discuss and review it together with experts!
3. Choose good tools (-> Adventure PHP Framework (APF))!
4. Write clean and reusable software only!
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
dr.e. ist offline   Mit Zitat antworten
Alt 31.12.2008, 12:55  
Erfahrener Benutzer
 
Registriert seit: 06.09.2008
Beiträge: 189
#Avedo befindet sich auf einem aufstrebenden Ast
Standard

Hallo!
Ich habe noch eine Frage. Sollte man in den Methoden, wie bei der Klasse Form_Element die Methode addValidator(), die Objekte übergeben bekommen nicht überprüfen, ob dieser Validator bereits gesetzt ist und in diesem Fall eine Exception werfen? Es würde natürlich auch ohne gehen, aber das ist ja eigentlich nicht sinn der Sache. Das hieße ja, dass mehrfachzuweisungen unerkannt bleiben. Ich würde diese Methoden also wie folgt ändern:
PHP-Code:
    /**
    * addValidator() - Adds an validator to an element
    *
    * @access public
    * @param Obj $validator
    * @return NONE
    */
    
public function addValidator($validator)
    {
        if( !isset(
$this->validators[$validator]) )
        {
            
$this->validators[] = $validator;
        }

        else
            throw new 
Exception('Validator was already assigned to this element.');
    } 
Macht das sinn oder reicht
PHP-Code:
    /**
    * addValidator() - Adds an validator to an element
    *
    * @access public
    * @param Obj $validator
    * @return NONE
    */
    
public function addValidator($validator)
    {
        
$this->validators[] = $validator;
    } 
MfG, Andy
__________________
I'm so tired of slitting the throats of people calling me a violent psychopath.
#Avedo ist offline   Mit Zitat antworten
Alt 31.12.2008, 13:03  
Moderator und Wett-König
 
Benutzerbild von dr.e.
 
Registriert seit: 21.05.2008
Beiträge: 3.633
PHP-Kenntnisse:
Fortgeschritten
dr.e. ist ein Lichtblickdr.e. ist ein Lichtblickdr.e. ist ein Lichtblickdr.e. ist ein Lichtblickdr.e. ist ein Lichtblickdr.e. ist ein Lichtblick
dr.e. eine Nachricht über Skype™ schicken
Standard

Zitat:
Sollte man in den Methoden, wie bei der Klasse Form_Element die Methode addValidator(), die Objekte übergeben bekommen nicht überprüfen, ob dieser Validator bereits gesetzt ist und in diesem Fall eine Exception werfen? Es würde natürlich auch ohne gehen, aber das ist ja eigentlich nicht sinn der Sache. Das hieße ja, dass mehrfachzuweisungen unerkannt bleiben.
Das kannst du ganz einfach dadurch verhindern, dass du die Validatoren in einem Hash-Table verwaltest:

PHP-Code:
public function addValidator($validator){
   
$hash md5(get_class($validator));
   if(!isset(
$this->validators[$hash])){
      
$this->validators[$hash] = $validator;
   }


Ich wende dieses Konzept in abgewandelter Form bei Actions im Frontcontroller an.
__________________
Viele Grüße,
Dr.E.

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1. Think about software design before you start to write code!
2. Discuss and review it together with experts!
3. Choose good tools (-> Adventure PHP Framework (APF))!
4. Write clean and reusable software only!
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
dr.e. ist offline   Mit Zitat antworten
Alt 31.12.2008, 13:25  
Erfahrener Benutzer
 
Registriert seit: 06.09.2008
Beiträge: 189
#Avedo befindet sich auf einem aufstrebenden Ast
Standard

Stimmt eine sehr schöne Variante um das zu lösen. Meine Variante hätte auch nicht funktioniert. Weiß auch nicht, was ich mir da gedacht habe. Würdest du eine Exception werfen, um darauf aufmerksam zu machen, dass diesem Element dieser Validator schon zugewießen wurde?
MfG, Andy
__________________
I'm so tired of slitting the throats of people calling me a violent psychopath.
#Avedo ist offline   Mit Zitat antworten
Alt 31.12.2008, 13:50  
Moderator
 
Benutzerbild von robo47
 
Registriert seit: 03.09.2004
Beiträge: 11.798
PHP-Kenntnisse:
Fortgeschritten
robo47 ist ein wunderbarer Anblickrobo47 ist ein wunderbarer Anblickrobo47 ist ein wunderbarer Anblickrobo47 ist ein wunderbarer Anblickrobo47 ist ein wunderbarer Anblickrobo47 ist ein wunderbarer Anblickrobo47 ist ein wunderbarer Anblickrobo47 ist ein wunderbarer Anblick
Standard

Validatoren bekommen ja optionen es kann ja durchaus sein dass der gleiche Validator mit verschiedenen optionen auf 1 element angewendet wird, mir ist zwar grad kein wirklicher Fall eingefallen aber möglich wäre es.
robo47 ist offline   Mit Zitat antworten
Alt 31.12.2008, 14:19  
Erfahrener Benutzer
 
Registriert seit: 06.09.2008
Beiträge: 189
#Avedo befindet sich auf einem aufstrebenden Ast
Standard

Das stimmt zwar, ein Beispiel wäre eine Regex basierter Validator, dem ein regex übergeben werden kann. Allerdings sollte sich der Hash bei zwei Instanzen des selben Validators mit verschiedenen Optionen ebenfalls unterscheiden. Das heißt es wird nur verhindert, dass zweimal der selbe Validator mit den selben Optionen auf ein Element angewandt wird. Habe im übrigen mal das Validator Interface in eine abstrakte Klasse umgewandelt. Ist das so ok?
PHP-Code:
<?php
error_reporting
(E_ALL E_STRICT);

/***
* Abstract Class Validator 
*
* The abstract Validator class 
* pretends the core methods.
*  
* @package Validator
* @version 0.1
**/  
Abstract class Validator 
{
    
/**
    *
    * @param mixed $value
    * @return boolean
    */
    
public function isValid($value);

    
/**
    * getErrors() - Returns the accured errors
    *
    * @access public
    * @return Array
    */
    
    
public function getErrors()
    {
        return 
$this->_errors;
    }
}
?>
MfG, Andy
__________________
I'm so tired of slitting the throats of people calling me a violent psychopath.
#Avedo ist offline   Mit Zitat antworten
Alt 31.12.2008, 14:26  
Moderator
 
Benutzerbild von robo47
 
Registriert seit: 03.09.2004
Beiträge: 11.798
PHP-Kenntnisse:
Fortgeschritten
robo47 ist ein wunderbarer Anblickrobo47 ist ein wunderbarer Anblickrobo47 ist ein wunderbarer Anblickrobo47 ist ein wunderbarer Anblickrobo47 ist ein wunderbarer Anblickrobo47 ist ein wunderbarer Anblickrobo47 ist ein wunderbarer Anblickrobo47 ist ein wunderbarer Anblick
Standard

Naja man könnte auch einfach als programmierer drauf achten einem element nicht 2 mal den gleichen validator hinzuzufügen.
Doppelte Validierung schadet ja imho auch nicht :P Sie frisst nur Zeit


btw in deiner Abstrakten Klasse, wenn du shcon _errors zurückgibst, dann deklariere das am besten auch gleich in der abstrakten klasse.
robo47 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
PHP: Formular Generator Zergling-new Tutorials 16 06.07.2010 03:14
Ergebnis von Formular in iFrame zeigen PsychoEagle HTML, Usability und Barrierefreiheit 2 22.07.2009 21:07
Problem mit Formular, Daten an datenbank senden Aurec PHP Tipps 2008 11 20.11.2008 18:17
Formular Pflichtfelder für Frontpage Formular erstellen Caruso JavaScript, Ajax und mehr 5 21.06.2008 09:17
Wert aus Textfeld in neues Formular übernehmen (kein Submit) PsychoEagle HTML, Usability und Barrierefreiheit 9 02.01.2007 14:51
formular includen samspa5 PHP Tipps 2006 13 18.03.2006 11:37
[Erledigt] Formular in Formular HTML, Usability und Barrierefreiheit 4 19.10.2005 12:18
[Erledigt] PHP Formular ~~wichtig~~ PHP Tipps 2005 27 29.05.2005 19:38
[Erledigt] Im Formular user abfragen? Datenbanken 3 06.01.2005 10:51
[Erledigt] PHP Formular - Daten an nächsten Schritt weiter geben - Wie? PHP Tipps 2005 14 02.01.2005 20:05
[Erledigt] Daten in einem Formular ausgeben und ändern PHP Tipps 2004-2 7 07.12.2004 17:22
Wie implementiere ich mein Email Formular? PHP Tipps 2004-2 2 14.11.2004 17:02
Brauche PHP Formular Beitragsarchiv 9 16.08.2004 16:23
[Erledigt] Formular mit Daten werden auf anderer Seite zusammengefasst PHP Tipps 2004 4 15.08.2004 15:44
[Erledigt] Daten in neuem Formular anzeigen PHP Tipps 2004 6 21.07.2004 10:44

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
zend_dojo_form tabelle tags </table>, zend wo wird die validator klasse erstellt, formularvalidierung anwendungsfalldiagramm, adventure php framework addvalidator, zend framework form hash, html form xslt validate php, zend addvalidator fehlermeldung ausgeben, formularvalidierung php, listen html form, zend_form validierung beispiel

Alle Zeitangaben in WEZ +1. Es ist jetzt 11:38 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