Routing in CodeIgniter für (:any)

Lesezeit: 2 Minuten

Benutzer-Avatar
Oliwol

Ich versuche, meine CodeIgniter-Anwendung ähnlich wie WordPress funktionieren zu lassen.

Ich möchte in der Lage sein, diese Art von URLs zu erstellen:

http://www.example.com/my-post-example

http://www.example.com/new-headline-here

http://www.example.com/i-love-stackoverflow

Meine Streckenführung:

$route['(:any)'] = "core/index/$1";

Dadurch wird mein Core-Controller aufgerufen und der Seitenname an die Indexfunktion übergeben.

Ich suche dann in meiner Datenbank nach dem Seitennamen und zeige die Seite dem Benutzer an. So weit, ist es gut.

Es wird jedoch Zeiten geben, in denen ich einen anderen Controller anrufen möchte. Zum Beispiel:

http://www.example.com/admin/edit_page/3

http://www.example.com/admin/settings

Jetzt gehe ich davon aus, dass meine Route einfach alle diese Regeln erfasst und an meinen Core-Controller sendet. Gibt es eine Möglichkeit, für bestimmte Seiten eine Ausnahme zu machen? Oder ist es eine gute Idee, diese Überprüfung in meinem Core-Controller durchzuführen.

Zum Beispiel,

if ($page not in DB) {
   // Call controller/method
}

Dies scheint ein wenig überflüssig zu sein, da ich nur möchte, dass CodeIgniter damit umgeht.

Die Routing-Regel, die Sie verwenden, ist für Ihren Zweck in Ordnung.

Wenn du benutzt http://www.example.com/admin/edit_page/3 diesen Link wird es Ihnen zusenden admin Controller u edit_page Methode. Es werden keine Routen verwendet any Regel.

Sie werden jedoch ein Problem bekommen, wenn Ihr Link so aussieht

http://www.example.com/my-post-example/test

Es wird versuchen zu gehen my-post-example Controller und Testverfahren.

Wieder http://www.example.com/admin wird Routen verwenden any Regel, bedeutet, dass Sie stattdessen zum Core-Controller umgeleitet werden admin/index. In diesem Fall sollte Ihre URL sein http://www.example.com/admin/index

Endlich Wenn Sie Ihren anderen Link mit Controller-/Methodennamen aufrufen, ist die Verwendung Ihres OK any Regel

  • Vielen Dank! Gibt es eine Möglichkeit, ein beliebiges URL-Muster abzugleichen? Einschließlich mit /? Also würde admin/edit/lol/ auch zu core/index gehen? Oder müsste ich die ganze Zeit (:any)/(:any)/(:any) hinzufügen?

    – Ölwol

    11. Mai 2017 um 7:44 Uhr

  • Fügen Sie vor Ihrer eine weitere Regel hinzu $route['(:any)'] = "core/index/$1";Regel $route['admin/edit/lol'] = "core/index";

    – Shaiful Islam

    11. Mai 2017 um 7:48 Uhr


  • Was ist, wenn ich Daten an die Funktion weiterleiten möchte, wie: admin/edit/lol => core/index und auch admin/new/test => core/index. Gibt es einen besseren Weg, als jede einzelne Regel hinzuzufügen? Wie Strecke[‘admin/(:any)/(:any)’] – aber mit der Möglichkeit, eine 3., 4. und 5. bis unendlich hinzuzufügen.

    – Ölwol

    21. Mai 2017 um 9:20 Uhr

  • Ja, Sie können so viele Regeln schreiben, wie Sie möchten. Aber man muss die Ordnung aufrechterhalten. Und Sie können Code optimieren, indem Sie eine Regel für ähnliche Regeltypen schreiben.

    – Shaiful Islam

    22. Mai 2017 um 4:55 Uhr

1379900cookie-checkRouting in CodeIgniter für (:any)

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy