borisbaer: URI als Datenbank-Identifier für Überschriften usw. verwenden

Beitrag lesen

Hallo zusammen,

bei meiner Website gibt es dynamische Pfade für Spiele, z.B.

…/games/demons-souls

Im Router-Attribut steht dann der Pfad so:

#[ Route( path: 'games/{page}', method: 'GET' ) ]

Ich möchte anhand dessen z.B. die Überschrift der entsprechenden Seite herleiten. Ich habe als Identifier aber nur diesen Part der URI, in meinem Beispiel ist das demons-souls.

In meiner Datenbank habe ich eine Tabelle games, die folgende Spalten enthält: gameID, title, franchise, origin, year, platform.

Der obige URI-Part (gemeint ist demons-souls) wird übrigens aus der Spalte title generiert, sprich aus Demon’s Souls wird durch eine entsprechende Funktion (slugify) demons-souls.

Folgende Möglichkeiten sehe ich:

Möglichkeit 1: Ich erstelle eine neue Spalte (z.B. mit dem Namen slug) und trage dort manuell demons-souls ein. Dann vergleiche die URI mit dem slug und bekomme meinen Titel und was ich sonst noch so haben will aus der Tabelle. Nachteil: Ich muss alles manuell machen.

Möglichkeit 2: Ich füge keine neue Spalte hinzu, sondern lese die Tabelle als Array aus, verändere in diesem Array die Spalte title so, dass die vollen Titel zu slugs werden. Anschließend vergleiche ich das neue Array mit dem slug in der URI und weiß so, in welcher Reihe geguckt werden muss. Nachteil: Ich parse das recht große Array (aktuell mehr als 1000 Einträge) zweimal. Zudem muss ich mir irgendwas überlegen, wenn es ein Spiel mit dem jeweiligen Namen mehr als einmal gibt. Bei Demon’s Souls gibt es nämlich das Original von 2009 und das Remake von 2020 – beide heißen aber Demon’s Souls. Der automatisch generierte slug müsste dies beachten und beim zweiten Eintrag die Jahreszahl hinzufügen, etwa demons-souls-2020. Alles in allem scheint das eher sehr kompliziert, nur um den Titel herauszufinden.

Möglichkeit 3: In der URI füge ich die unique ID (gameID) ein, z.B. …/games/25/demons-souls, verstecke sie jedoch über irgendeine Rewrite-Regel. Ich weiß jedoch nicht, ob PHP auch auf versteckte URI-Teile zugreifen kann. Ist eigentlich so ähnlich wie Möglichkeit 1, nur dass ich hier nach der unique ID schaue.

Wie wird so etwas normalerweise gehandhabt? Ich wäre sehr dankbar für jede Hilfe.

Grüße
Boris