Routing in CodeIgniter 4: rotte esplicite e auto routing Improved

Come definire rotte GET e POST, controller e parametri in CodeIgniter 4; configurazione corretta e limiti dell’auto routing Improved.

Routing in CodeIgniter 4: rotte esplicite e auto routing Improved

Il router collega un URL e un metodo HTTP a un controller. Le rotte esplicite rendono visibile quali azioni sono accessibili; l’auto routing Improved è un’alternativa da configurare deliberatamente. Gli esempi seguono le convenzioni della documentazione recente: verifica la tua versione di CodeIgniter prima di applicarli.

Definisci rotte esplicite

In app/Config/Routes.php aggiungi le rotte all’oggetto $routes già disponibile. Importa la classe Products, usa il metodo GET per la lettura e POST per la creazione. (:num) cattura un segmento numerico e lo passa come argomento a show. Le tre rotte sotto sono un esempio coerente; adatta i nomi e le autorizzazioni al progetto.

<?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']);

Scrivi il controller

Crea app/Controllers/Products.php con il namespace App\Controllers. I metodi pubblici usati dalle rotte restituiscono una risposta; helperMethod è protetto e non va esposto come azione. L’esempio restituisce dati dimostrativi: nella tua applicazione implementa validazione, persistenza e controllo degli accessi prima di creare una risorsa.

<?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.
    }
}

Proteggi le azioni

Usa GET per consultare e POST per modificare. Proteggi le operazioni sensibili con autenticazione e autorizzazione, valida i dati in ingresso e abilita la protezione CSRF nei moduli secondo la configurazione dell’applicazione. Una rotta definita non rende sicuro da sola il controller.

Auto routing Improved come alternativa

Se scegli Improved Auto Routing, imposta $autoRoute=true in app/Config/Routing.php e $autoRoutesImproved=true in app/Config/Feature.php. I metodi raggiungibili hanno un prefisso HTTP, per esempio getHello() per GET /hello-world/hello nel controller HelloWorld. La rotta predefinita verso Home::index può impedire l’auto routing della radice: rimuovila se vuoi che anche / venga risolta automaticamente. I frammenti qui sotto appartengono a file diversi e illustrano la modalità alternativa: non combinarli con le rotte esplicite dello stesso esempio senza verificare le precedenze.

// 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'; }

Nomi, segmenti e limiti

Nell’auto routing la corrispondenza tra segmenti URL, nomi di controller e metodi segue le regole della versione installata. Definisci route esplicite per URL pubblici stabili o quando servono vincoli puntuali su metodi e filtri. Non esporre casualmente metodi pubblici o azioni amministrative.

Verifica le rotte

Esegui php spark routes per ispezionare le rotte registrate e prova richieste GET e POST nei casi permessi e vietati. Controlla gli errori 404/405, l’ordine delle rotte e il comportamento dei filtri. Non dare per scontato che una rotta dinamica compaia nell’elenco delle rotte esplicite.

php spark routes

Fonti ufficiali

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 .

Share

What's Your Reaction?

Like Like 0
Cancella like Cancella like 0
Amore Amore 0
Buffo Buffo 0
arrabbiato arrabbiato 0
Sad Sad 0
Wow Wow 0