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 01.08.2011, 10:18  
Erfahrener Benutzer
 
Registriert seit: 30.07.2008
Beiträge: 1.169
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 Link Generator

Hi,

ich stehe gerade vor einem Problem und komme da nicht recht weiter. Es geht darum, dass ich für mein Framework ein Objekt haben möchte, mit dem ich URLs generieren möchte. Da gibt es natürlich einen standardmäßig genutzten, aber mam soll auch eigene implementieren können. Das nahe liegendste ist da für mich, ein Interface zu nutzen. Das Problem dabei ist jetzt, dass die Methode zum Generieren der Links (assembleLink) unterschiedliche Parameter entgegen nehmen können soll.

Jetzt habe ich drei Möglichkeiten, die mir aber alle nicht so sonderlich gefallen:
- Statt einem Interface eine abstrakte Klasse, bei der dann die Methode assembleUrl überschrieben werden kann.
- Statt einzelner Parameter ein Array übergeben
- Grundsätzlich in Methoden-Deklaration alle möglichen Parameter aufnehmen (Was allerdings für mich die schlechteste Methode wäre, da ich ja nicht weiß, was da alles kommen könnte)

Mein Favorit wäre jetzt das Interface + Array, aber vielleicht hat sonst noch jemand eine Idee.
xm22 ist offline   Mit Zitat antworten
Sponsor Mitteilung
PHP Code Flüsterer

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

Alt 01.08.2011, 12:05  
Erfahrener Benutzer
 
Registriert seit: 02.09.2009
Beiträge: 1.020
PHP-Kenntnisse:
Fortgeschritten
mquadrat befindet sich auf einem aufstrebenden Ast
Standard

Von wievielen verschiedenen Parametern reden wir denn?
__________________
Wir suchen PHP Entwickler (Vollzeit) im Raum Darmstadt / Rhein-Main. Infos via E-Mail mueller@new-frontiers.de
mquadrat ist offline   Mit Zitat antworten
Alt 01.08.2011, 12:18  
Erfahrener Benutzer
 
Registriert seit: 11.04.2011
Beiträge: 260
PHP-Kenntnisse:
Fortgeschritten
lcrash wird schon bald berühmt werden
Standard

Warum will man eigene Links implementieren? Sehe da keinen Sinn drin, Link ist Link und dass in einem vorgegeben Format innerhalb deines Frameworks.

Hast du einen Router? Dann könnte der Link-Generator einfach nur für die aktuelle Route (oder eine anderen) den Link zusammensetzen.
lcrash ist offline   Mit Zitat antworten
Alt 01.08.2011, 13:13  
Erfahrener Benutzer
 
Registriert seit: 30.07.2008
Beiträge: 1.169
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:
Von wievielen verschiedenen Parametern reden wir denn?
K. A. - Das ist halt nicht absehbar.
Zitat:
Link ist Link und dass in einem vorgegeben Format innerhalb deines Frameworks.
Gerade nicht - Dafür will ich ja verschiedene Generatoren implementieren. Einerseits sollen sie Links nach einem bestimmten Schema erzeugen, auf der anderen Seite sollen sie sie auch auflösen können - Ähnlich wie die Routen beim ZF.
xm22 ist offline   Mit Zitat antworten
Alt 01.08.2011, 13:17  
moderatives Dielektrikum
 
Benutzerbild von nikosch
 
Registriert seit: 21.05.2008
Beiträge: 35.994
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:
- Statt einem Interface eine abstrakte Klasse, bei der dann die Methode assembleUrl überschrieben werden kann.
Hilft Dir auch nichts. Nen strict Error kassierst Du trotzdem
Zitat:
- Statt einzelner Parameter ein Array übergeben
Kommt daruf an, was das für Parameter sind.
Zitat:
- Grundsätzlich in Methoden-Deklaration alle möglichen Parameter aufnehmen (Was allerdings für mich die schlechteste
Dann musst Du aber alle anfallenden Parameter vorbelegen (optional gestalten) - wiederum strict

func_get_args wäre auch noch ne Möglichkeit, aber ein sauberes Interface bekommst Du so nicht.

Oder Du gestalteste die Abfragemethode einheitlich und baust statt dessen konkrete Init-Methoden oder individuelle Konstruktoren ein.
__________________
--
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 01.08.2011, 13:22  
Erfahrener Benutzer
 
Registriert seit: 30.07.2008
Beiträge: 1.169
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:
func_get_args wäre auch noch ne Möglichkeit
Näää... Das ist auch nicht besser als meine "Ideen"
Zitat:
Oder Du gestalteste die Abfragemethode einheitlich und baust statt dessen konkrete Init-Methoden oder individuelle Konstruktoren ein.
Wie meinst Du das? Parameter in den Konstruktor des Link-Generators? Wäre allerdings auch etwas unpraktisch, da man dann jedes Mal ein neues Objekt davon instanziieren müsste. Also quasi so etwa:
PHP-Code:
    $link = new LinkGeneratorIrgendwas($param1$param2'...');
    echo 
$link
Andererseits könnte man das auch wie ein Prepared Statement machen, dass man Parameter der Instanz ändern kann.. Das klingt sogar ziemlich gut..
PHP-Code:
    $link = new LinkGeneratorIrgendwas($param1$param2'...');
    echo 
$link->assemble();
    
$link->setParam1('...');
    echo 
$link->assemble(); 
Dann könnte man das assemble auch gleich ganz weglassen und die toString-Funktion nutzen. Ich glaube, das ist ein ziemlich guter Ansatz..

EDIT: Oder noch ein bisschen leckerer - Man bekommt ein URL-Objekt zurück.

Geändert von xm22 (01.08.2011 um 13:31 Uhr).
xm22 ist offline   Mit Zitat antworten
Alt 07.08.2011, 13:47  
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

Hast du dir schon mal das Konzept des APF angesehen? --> http://adventure-php-framework.org/Seite/138-Links. Dort hast du eine Abstraktion der Link-Generierung. Schwierigkeit für dein Framework ist jedoch, dass du keine Abstraktion der URL vorgesehen hast (siehe unsere Diskussionen in den vergangenen Monaten). Damit ist das Konzept nicht ganz so einfach umsetzbar. Zielführend ist es IMHO aber trotzdem.
__________________
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 07.08.2011, 15:27  
Erfahrener Benutzer
 
Registriert seit: 30.07.2008
Beiträge: 1.169
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

Stimmt, ganz so funktioniert es nicht. Allerdings habe ich es jetzt ähnlich gelöst (Glaube ich zumindest). Es gibt einmal einen URL-Genrator, dessen Daten einerseits per Settern gesetzt werden können, der aber auch anhand einer vorhandenen URL geladenen werden kann.
PHP-Code:
$generator = new LinkGenerator();
$generator->loadFromUrlString('...');
//oder auch
$generator->loadFromUrlString(Url::fromCurrent()); 
Dann kann man auch auf die vorhandenen Parameter zurück greifen.

Was mir bei der APF-Lösung seltsam vorkommt, ist, dass der Link-Generator ein fertiges URL-Objekt übergeben bekommt. Warum das? Bei mir liefert der Link-Generator ein fertiges URL-Objekt zurück, dass dann ausgegeben werden kann..

Geändert von xm22 (07.08.2011 um 15:37 Uhr).
xm22 ist offline   Mit Zitat antworten
Alt 07.08.2011, 18:00  
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

Hi xm22,

Zitat:
PHP-Code:
$generator->loadFromUrlString(Url::fromCurrent()); 
Das macht für mich einen etwas seltsamen Eindruck - rein von der Modellierung her. Du möchtest mit dem Generator doch etwas generieren. Warum ist hier ein load im Methoden-Namen enthalten?

Zitat:
Was mir bei der APF-Lösung seltsam vorkommt, ist, dass der Link-Generator ein fertiges URL-Objekt übergeben bekommt. Warum das?
Bei der Generierung einer URL geht es doch im Wesentlichen um die Formatierung einer URL als String. Die reine Repräsentation ist für die (spätere) Ausgabe doch irrelevant. Warum? Der HTML-Quelltext ist eine reine String-Repräsentation, die über unterschiedliche Komponenten erzeugt wird. Was die Arbeit mit einem solchen Formatter angeht, so darf und soll die API typisiert sein. Weiterhin geht es um das Thema Abstraktion von Url-Layouts (siehe http://wiki.adventure-php-framework....en_URL-Layouts). Damit ist es wichtig, eine Url als solche unabhängig von der String-Repräsentation zu definieren und intern auch mit dieser zu arbeiten. Innerhalb einer Applikation sollst du keine Kenntnis des URL-Layouts haben (müssen), denn nur dann ereichst du eine Abstraktion. Aus diesen Grund arbeiten alle Applikationen mit einem abstrakten (im Sinne von "abstrahierend") Objekt, das eine URL gemäß RFC repräsentiert. Mehr muss und soll diese nicht "können", denn sonst generierst du dir wieder Abhängigkeiten.

Da du dieses Verhalten als seltsam betrachtest, verstehe ich nicht, warum du die oben zittierte Zeile aufführst. Betrachtest du deinen Gedankengang weiter, dürftest du dem Generator kein Url-Objekt übergeben, sondern höchstens eigene Parameter für Host, Port, Parameter etc. Das sieht deine Signatur aber nicht vor.

Zitat:
Bei mir liefert der Link-Generator ein fertiges URL-Objekt zurück, dass dann ausgegeben werden kann..
Und was macht diese Rückgabe aus? Nur der Signatur wegen ein Url-Objekt zurückzugeben macht IMHO keinen Sinn, wenn hinterher auch nur
PHP-Code:
$url->toString() 
explizit oder implizit aufgerufen wird.

Lies dir mal den Wiki-Beitrag genauer durch, dann wirst du verstehen, worum es bei diesem Thema eigentlich gehen sollte.
__________________
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 09.08.2011, 12:21  
Erfahrener Benutzer
 
Registriert seit: 30.07.2008
Beiträge: 1.169
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:
PHP-Code:
$generator->loadFromUrlString(Url::fromCurrent());

Das macht für mich einen etwas seltsamen Eindruck - rein von der Modellierung her. Du möchtest mit dem Generator doch etwas generieren. Warum ist hier ein load im Methoden-Namen enthalten?
Das ist so gedacht: Der Genrator wird normalerweise instanziiert und dann mit entsprechenden Werten gefüllt (z. B. angesprochene Node, URL-Parameter, etc.) Daraus generiert er ein URL-Objekt, dass, wie beim APF, im Prinzip lediglich dazu dient, Daten (Scheme, Host, Pfad, Port, etc.) aufnehmen zu können, um eine URL generieren. Also eigentlich nichts weiter als ein Container mit ein paar Hilfsfunktionen.
Der Generator selbst verfügt über zwei Wege:
1. Aus Daten eine URL zu erzeugen
2. Aus einer URL Daten zu extrahieren
Das erfüllt die loadFromString-Funktion.

Mittlerweile hat sich das Ganze aber etwas geändert. Der Generator ist mittlerweile zum UrlResolver geworden, da das von der Namensgebung her besser zum Zweck passt. Der eigentliche Ablauf ist jedoch der selbe: Man kann dem Resolver ein URL-Objekt übergeben und er extrahiert daraus Daten, die z. B. der Front-Controller für das Dispatching benutzen kann.
xm22 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] File Upload script - hochgeladener Link verschlüsseln und automatisch löschen staybb PHP Einsteiger 7 18.03.2011 13:01
Eine Seite mit allen GET-Variablen in Link übernehmen snemies PHP Tipps 2009 5 30.10.2009 15:40
link -> get variabeln auslesen clemo PHP Tipps 2009 10 25.09.2009 02:16
[Erledigt] gesamte Spalte in Array abspeichern Kotbatzen PHP Tipps 2009 23 05.09.2009 00:01
Link mit ID in Echo einbinden Mitch26 PHP Tipps 2009 4 06.08.2009 17:02
[Erledigt] mail() mit <a herf... Link in Html Mail geht nicht!? BettinaSyn PHP Tipps 2009 11 16.05.2009 22:28
[Erledigt] phpmailer link im body bereich definieren raphaelf PHP Tipps 2009 5 14.05.2009 10:52
erst beim zweiten Login funktioniert Link scarry_77 PHP Tipps 2009 5 14.04.2009 00:35
Klick auf Seitenobjekt (Link mit onClick Ereigniss) mit JScript simulieren Stephan_87 JavaScript, Ajax und mehr 1 22.12.2008 21:50
Smiley Generator Jay0815 PHP Tipps 2008 3 28.12.2007 16:22
Daten aus MySQL-abfrage zum Link mit id zusammensetzen maccoder Datenbanken 2 13.09.2005 16:49
Suche Tipps für Persormance-Steigerung (Geld für Nützliches) Beitragsarchiv 18 16.08.2005 10:57
absoluter link PHP Tipps 2004 10 01.07.2004 23:00
PHP Link ??? PHP Tipps 2004 4 25.06.2004 17:24

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
php link generator, php generator, link generator php, php link gen, bei link generator 2 urls eingeben, php linkgenerator, link generator parameter, link geneartor php

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