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.
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
0
Cancella like
0
Amore
0
Buffo
0
arrabbiato
0
Sad
0
Wow
0