Konsistente Benennung und Verhalten von Funktionen zum Holen von Seiten URLs
In der \QUI\Projects\Site
Klasse gibt es folgende "URL"-Methoden:
-
getUrl($pathParams = [], $getParams = [])
:- Dokumentation: "Gibt die URL der Seite zurück"
- Verhalten: Gibt einen String der Form
index.php?id=123&project=abc&lang=xy
zurück.
-
getUrlRewritten($pathParams = [], $getParams = [])
- Dokumentation: "Gibt eine sprechenden URL zurück"
- Verhalten: Gibt eine URL der Form
/foo/bar
zurück, wenn es nur einen vHost (für ein Projekt?) gibt und in der Formhttps://example.org/foo/bar
, wenn es mehrere vHosts (für ein Projekt?) gibt.
-
getUrlRewrittenWithHost(array $pathParams = [], array $getParams = [])
- Dokumentation: "Returns a 'speeking' URL with host"
- Verhalten: Gibt eine URL der Form
https://example.org/foo/bar
zurück.
Dass die getUrlRewritten
Methode manchmal den Host mit zurückgibt und manchmal nicht, ist inkonsistent.
Dass alle Methoden laut Namen eine URL zurückgeben sollen, aber teilweise keinen Host enthalten ist ebenfalls "verwirrend". Eine URL ist per Definition wie folgt aufgebaut:
URI/URL = scheme ":" ["//" authority] path ["?" query] ["#" fragment]
wobei
authority = [userinfo "@"] host [":" port]
Das Ergebnis einer "URL"-Methode sollte also alle diese Bestandteile enthalten.
Des Weiteren sind die Methodenbeschreibungen nicht sehr aussagekräftig.
Außerdem ist mir nicht ganz klar was die Parameter $pathParams
und $getParams
machen.
Ich würde folgende Änderungen vorschlagen:
Die Methoden
getUrl
getUrlRewritten
getUrlRewrittenWithHost
werden als deprecated markiert.
Es wird eine URI
/URL
Klasse eingeführt, die \Psr\Http\Message\UriInterface
aus PSR-7
implementiert.
Das Interface schreibt bspw. die folgenden Methoden vor:
getHost
getPath
getQuery
__toString
Wenn man das nicht selbst implementieren möchte, kann bspw. die bereits fertige Klasse \GuzzleHttp\Psr7\Uri
oder eine andere Library verwendet werden.
In der \QUI\Projects\Site
Klasse werden dann die folgenden neuen Methoden eingeführt:
-
getParameterizedUri
: Gibt einURI
Objekt mit einer URL der Formhttps://example.org/index.php?id=123&project=abc&lang=xy
zurück -
getUri
: Gibt einURI
Objekt mit einer URL der Form[https://example.org/index.php?id=123&project=abc&lang=xy](https://example.org/foo/bar)
zurück
Aus dem URI
Objekt kann der Aufrufende sich dann alle Teile holen, die er für seinen Anwendungsfall benötigt.
Da es kein Breaking Change ist, kann die Änderung in einer Minor-Version veröffentlicht werden.