php.de

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

PHP-Fortgeschrittene Arbeiten mit PHP ohne Einschränkungen

Antwort
 
LinkBack Themen-Optionen Thema bewerten
Alt 14.11.2007, 14:17  
Erfahrener Benutzer
 
Registriert seit: 21.05.2008
Beiträge: 9.937
Zergling-new wird schon bald berühmt werden
Standard Objekte zur Laufzeit Vererbung anhängen

Hallo,
ich arbeite gerade mit dem Zend-Framework, speziell dem Proposal Zend_Form, da ich auf der Suche nach einem Form-Builder bin. Ich habe dabei sehr genaue Vorstellungen, Zend_Form erfüllt meine Validierungsvorstellungen gut, jetzt benötige ich zum Validierer des Formulars noch einen Viewer.

Nun habe ich also einige Objekte von Zend_Form_Element* und möchte diese um View-Funktionalitäten (label, form-type (text, select, radio, ..), etc.) erweitern. Wie gesagt handelt es sich dabei bereits um Objekte, denen ich nun zusätzliche Funktionalitäten geben möchte, ohne eben dabei direkt Änderungen am Zend-Framework oder Proposals vornehmen zu müssen.

Macht dieser Vorgang Sinn, habt ihr soetwas schon einmal gemacht?
Wäre es besser eine eigene Klasse zu schreiben, die diese Zend_Form_Elemente nur übergeben bekommt und sie somit "soft" erweitert? (dieser Gedanke kam mir jetzt erst beim Schreiben).

Meinungen? Danke im voraus!
Zergling-new ist offline   Mit Zitat antworten
Sponsor Mitteilung
PHP Code Flüsterer

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

Alt 14.11.2007, 15:23  
Erfahrener Benutzer
 
Registriert seit: 21.05.2008
Beiträge: 9.937
Zergling-new wird schon bald berühmt werden
Standard

Ein weiterer Punkt, wofür ich das gebrauchen würde, wäre private/protected Werte auszulesen, auf die ich sonst keinen Zugriff hätte. Ich weiß das ist nicht die feine Art, aber ich möchte erklären warum:

Mit Zend_Form->addField(..)->addValidator(..)
kann ich einem erzeugten Feld einen Validator zuweisen, der private im Zend_Form_Element_Field abgespeichert wird. Um einen Viewer für dieses Formular zu bauen, möchte ich analysieren können, welche Validierer für das Feld eingesetzt wurden um einen Feldtyp (text, select, radio, ..) vorzuschlagen.
Zergling-new ist offline   Mit Zitat antworten
Alt 14.11.2007, 20:38  
Moderator und Wett-König
 
Benutzerbild von dr.e.
 
Registriert seit: 21.05.2008
Beiträge: 3.657
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

Hallo Zergling,

an sich ist für diesen Anwendungsfall eine Provider-Logik gedacht. Dabei gibst du jedem Objekt einen Provider mit, der bei der Ausgabe des Formulars den entsprechenden HTML-Text erzeugt. Im View sollte es damit möglich sein, die Ausgabe eines Formulars zu erzeugen, ohne die Objekte selbst verändern zu müssen. Das muss allerdings bereits von Zend_Form* unterstütz werden. Ist das nicht der Fall, bleibt dir meiner Einschätzung nach nichts anderes übrig, als dir "eigene" Form-Elemente zu erstellen, die dieses können. Der einfachste Fall ist, du erstellst einen Satz Klassen, die lediglich das Delta zwischen deinen Anforderungen und den vom Zend Framework gegebenen Mitteln bereitstellen.

Zitat:
Zend_Form->addField(..)->addValidator(..)
Das hat den großen Nachteil, dass du ein Formular zwar objekttechnisch erstellen, jedoch nicht formatieren kannst. Auch ein Provider kann dir da nur marginal helfen, weil dieser z.B. die Anordnung der Felder, bzw. deren Bezeichnung bei mehrsprachigen Anwendungen, nicht kennen kann.
__________________
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 14.11.2007, 21:09  
Erfahrener Benutzer
 
Registriert seit: 21.05.2008
Beiträge: 9.937
Zergling-new wird schon bald berühmt werden
Standard

Hallo,
die Anforderung ist gerade Internationalisierung. An einen Provider (ist das der Name für so ein Design-Pattern?) hatte ich auch gedacht. Allerdings kann ich keine Klasse "dazwischenschieben". Das macht Zend_Form alles selbst und ich möchte ja gerade nicht in Zend-Klassen das Editieren anfangen.

Ich bin dabei einen ganz netten FormBuilder (Xend_Form, leitet Zend_Form ab) mit Viewer (Xend_View_Helper_Form) zu erstellen. Ist ein Gefrickel, aber ich denke er wird sehr mächtig sein.

Momentan leite ich nicht ab, sondern greife über X-Zugriffsmethoden auf die Informationen zu, die ich benötige.

Ich habe vor in den nächsten Tagen/Wochen die Klassen in Tutorials zu posten. Auch als kleines Tutorial für OOP.

Danke für deine Antwort soweit.
Zergling-new ist offline   Mit Zitat antworten
Alt 14.11.2007, 22:31  
Moderator und Wett-König
 
Benutzerbild von dr.e.
 
Registriert seit: 21.05.2008
Beiträge: 3.657
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

Hallo Zergling,

Zitat:
An einen Provider (ist das der Name für so ein Design-Pattern?) hatte ich auch gedacht.
Auch das ist wieder eines von den Design-Pattern - ja. Grundsätzlich kann man das immer als Helfer für Content-Generierung in Views verwenden, sofern sauber gelöst ist, dass man an ein Objekt Provider hängen kann. So etwas nennt man Output-Provider. Aber nicht nur im GUI-Bereich sind Provider gefragt, man kann das umgekehrt auch in der Datenschicht anwenden. Hier kann man z.B. Provider für verschiedene Datenquellen schreiben, die Daten eines definierten Interfaces an die Datenkomponente zurückliefern. Ein Name dafür kann Content-Provider sein.
__________________
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 16.11.2007, 13:26  
Erfahrener Benutzer
 
Registriert seit: 21.05.2008
Beiträge: 9.937
Zergling-new wird schon bald berühmt werden
Standard

Ich habe ja das Buch hier: Klick
Da findet sich kein Provider-Pattern, wie ist denn die deutsche Bezeichnung dafür?
Zergling-new ist offline   Mit Zitat antworten
Alt 16.11.2007, 20:40  
Moderator und Wett-König
 
Benutzerbild von dr.e.
 
Registriert seit: 21.05.2008
Beiträge: 3.657
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

Hallo Zergling,

auf die Schnelle habe ich nur folgendes für dich:

- http://msdn2.microsoft.com/en-us/library/Aa479046.aspx
- http://msdn2.microsoft.com/en-us/library/ms972319.aspx
- http://msdn2.microsoft.com/en-us/library/ms972370.aspx
- http://www.codeproject.com/useritems...tern_files.asp

Sollte dir das nicht helfen, diskutieren wir das einfach in einem konkreten Beispiel. Grundsätzlich gestaltet sich das aber wie folgt:

PHP-Code:
<?php
   $Manager 
= new ModuleManager();
   
$Object $Manager->loadObjectByID(1);
   
$Object->setOutputprovider(new MyOutputProvider());
   echo 
$Object->getOutput();
?>
Das ist jedoch nur Beispiel für einen Output-Provider eines Objektes. Mehr Sinn macht natürlich einen Provider für ein komplettes Control - wie einem Treecontrol - zu setzen.
__________________
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 17.11.2007, 07:40  
Moderator
 
Benutzerbild von robo47
 
Registriert seit: 03.09.2004
Beiträge: 11.792
PHP-Kenntnisse:
Fortgeschritten
robo47 kann auf vieles stolz seinrobo47 kann auf vieles stolz seinrobo47 kann auf vieles stolz seinrobo47 kann auf vieles stolz seinrobo47 kann auf vieles stolz seinrobo47 kann auf vieles stolz seinrobo47 kann auf vieles stolz seinrobo47 kann auf vieles stolz sein
Standard

Zitat:
Zitat von Zergling
Mit Zend_Form->addField(..)->addValidator(..)
kann ich einem erzeugten Feld einen Validator zuweisen, der private im Zend_Form_Element_Field abgespeichert wird. Um einen Viewer für dieses Formular zu bauen, möchte ich analysieren können, welche Validierer für das Feld eingesetzt wurden um einen Feldtyp (text, select, radio, ..) vorzuschlagen.
Wie wäre es mit ner Art XML-Config (oder einem Array) für jedes Formular das du dir bastelst, dass eine Liste der vorhandenen Feldnamen + Typen und soweiter enthält ? und darüber das ganze auswertest ? Müsstest du dann halt doppelt pflegen, die XML + den View (ausser dir reicht ein einfacher HTML-Output, dann sollte sich aus dem XML auch der View erzeugen lassen).


Halte ich jetzt für sinnvoller als den Versuch zu raten welcher Feldtyp etwas ist oder ?

Haben wir es übrigends von dem Proposal: http://framework.zend.com/wiki/pages...n?pageId=36061 ?

Zend_Form_Element bietet dort folgende public-Methoden:

getFilterChain
getValidatorChain
getTypeHint(s)

damit würdest du auch an die Filter + Validatoren kommen.
robo47 ist offline   Mit Zitat antworten
Alt 17.11.2007, 17:31  
Erfahrener Benutzer
 
Registriert seit: 21.05.2008
Beiträge: 9.937
Zergling-new wird schon bald berühmt werden
Standard

Ne dem:
http://mitchellhashimoto.com/zend-form

XML ist mir zu "verstreut". Die Ausgabe kommt jedenfalls in einen View-Helper haben wir in der Agentur mal angedacht.
Zergling-new 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] Referenzen auf Objekte innerhalb eines Arrays PHP-Fortgeschrittene 6 31.08.2009 17:06
[Erledigt] Objekte übergeben Felix PHP Tipps 2008 23 18.06.2008 12:21
[Erledigt] Objekte vergleichen PHP-Fortgeschrittene 4 08.12.2005 16:20
Ganze Objekte an Script weitergeben dreamingof8a PHP Tipps 2004-2 6 23.11.2004 12:17
[Erledigt] Referenzen auf Objekte PHP-Fortgeschrittene 2 17.08.2004 11:08
Klasse wärend der Laufzeit ergänzen Spyker PHP Tipps 2004 3 12.08.2004 15:25
Anonyme Objekte? PHP-Fortgeschrittene 18 25.07.2004 22:19

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
php dynamische vererbung, php objekt anhängen, dynamische vererbung php, php klassen vererbung dynamisch, php objekt vererbung, php objekte vererben, zend_form xml vererben, php an object anhängen, php object vererben, php vererbung laufzeit, php vererbung zur laufzeit, php objekte anhängen, php protected zur laufzeit ergänzen, zend form addfield select, php object ein object anhängen, objekte zur laufzeit vererben, object anhängen php, php objekt in objekt anhängen, php dynamische vererbung?, php objekt klasse ändern zur laufzeit

Alle Zeitangaben in WEZ +2. Es ist jetzt 00:27 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

Creative Commons License
Dieser Inhalt ist unter einer Creative Commons-Lizenz lizenziert.