Skip to content

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 Form https://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 ein URI Objekt mit einer URL der Form https://example.org/index.php?id=123&project=abc&lang=xy zurück
  • getUri: Gibt ein URI 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.

/cc @mor
/cc @henbug