Routing in CodeIgniter 4: explizite Routen und Improved Auto Routing

GET- und POST-Routen, Controller und Parameter in CodeIgniter 4 definieren; Improved Auto Routing korrekt konfigurieren und Grenzen beachten.

Routing in CodeIgniter 4: explizite Routen und Improved Auto Routing

Der Router ordnet URL und HTTP-Methode einem Controller zu. Explizite Routen zeigen klar, welche Aktionen erreichbar sind; Improved Auto Routing ist eine bewusst zu konfigurierende Alternative. Die Beispiele orientieren sich an aktueller Dokumentation: Prüfen Sie vor der Anwendung Ihre CodeIgniter-Version.

Explizite Routen definieren

Fügen Sie Routen in app/Config/Routes.php dem bereits vorhandenen Objekt $routes hinzu. Importieren Sie Products, verwenden Sie GET zum Lesen und POST zum Erstellen. (:num) übernimmt ein numerisches URL-Segment und übergibt es an show. Die drei Routen bilden ein konsistentes Beispiel; passen Sie Namen und Berechtigungen an.

<?php
// app/Config/Routes.php
use App\Controllers\Products;

$routes->get('products', [Products::class, 'index']);
$routes->get('products/(:num)', [Products::class, 'show']);
$routes->post('products', [Products::class, 'create']);

Controller erstellen

Legen Sie app/Controllers/Products.php mit dem Namespace App\Controllers an. Die öffentlichen Methoden der Routen liefern Antworten; die geschützte Methode helperMethod ist keine erreichbare Aktion. Das Beispiel liefert nur Platzhalterdaten: Vor dem echten Erstellen brauchen Sie Validierung, Speicherung und Zugriffskontrolle.

<?php
// app/Controllers/Products.php
namespace App\Controllers;

class Products extends BaseController
{
    public function index(): string
    {
        return 'Products';
    }

    public function show(int $id): string
    {
        return 'Product ' . $id;
    }

    public function create()
    {
        return $this->response->setStatusCode(201)->setJSON(['created' => true]);
    }

    protected function helperMethod(): void
    {
        // Internal logic.
    }
}

Aktionen absichern

Verwenden Sie GET für Lesezugriffe und POST für Änderungen. Schützen Sie sensible Aktionen durch Authentifizierung und Autorisierung, validieren Sie Eingaben und richten Sie CSRF-Schutz für Formulare passend ein. Eine definierte Route allein sichert den Controller nicht.

Improved Auto Routing als Alternative

Setzen Sie für Improved Auto Routing $autoRoute=true in app/Config/Routing.php und $autoRoutesImproved=true in app/Config/Feature.php. Erreichbare Methoden erhalten ein HTTP-Verb als Präfix, beispielsweise getHello() für GET /hello-world/hello im Controller HelloWorld. Die Standardroute zu Home::index kann automatisches Routing für / verhindern; entfernen Sie sie, falls die Startseite automatisch aufgelöst werden soll. Die Ausschnitte gehören in unterschiedliche Dateien und beschreiben eine alternative Betriebsart; prüfen Sie beim Kombinieren mit expliziten Routen deren Priorität.

// app/Config/Routing.php
public bool $autoRoute = true;

// app/Config/Feature.php
public bool $autoRoutesImproved = true;

// Example auto-routed method: GET /hello-world/hello
public function getHello(): string { return 'Hello'; }

Namen, Segmente und Grenzen

Wie URL-Segmente zu Controllern und Methoden passen, richtet sich nach der installierten Version. Nutzen Sie explizite Routen für stabile öffentliche URLs und genaue Vorgaben zu Methoden oder Filtern. Öffentliche Methoden und Verwaltungsaktionen dürfen nicht versehentlich erreichbar werden.

Routen prüfen

Mit php spark routes sehen Sie registrierte Routen. Testen Sie zusätzlich erlaubte und verbotene GET- und POST-Anfragen, 404/405, Reihenfolge und Filter. Dynamisch gefundene Routen müssen nicht in der Liste expliziter Routen erscheinen.

php spark routes

Offizielle Quellen

Routing: https://codeigniter4.github.io/CodeIgniter4/incoming/routing.html ; Improved Auto Routing: https://codeigniter4.github.io/CodeIgniter4/incoming/auto_routing_improved.html ; Controller: https://codeigniter4.github.io/CodeIgniter4/incoming/controllers.html .

Teilen

Was ist Ihre Reaktion?

Gefällt mir Gefällt mir 0
Gefällt mir nicht Gefällt mir nicht 0
Liebe Liebe 0
Lustig Lustig 0
Wütend Wütend 0
Traurig Traurig 0
Wow Wow 0