In acest articol vom trata un feature foarte util in CodeIgniter, care din pacate este trecut cu vederea de o parte din dezvoltatori.
Este vorba despre asa numitele rute. Cu ajutorul lor putem sa definim niste handlere care sa reactioneze atunci cand un anumit parametru este trimis in browser.
Unul din cele mai intalnite lucruri la care sunt folosite rutele, este crearea de “URL-uri prietenoase”. Cu alte cuvinte, in loc de http://www.magazin.ro/produs/detaliu/23
o sa avem http://www.magazin.ro/detaliu-produs/telefon-mobil-android
.
Sa vedem asadar, cum folosim rutele ca sa obtinem acest efect. Rutele sunt definite in mod previzibil in application/config/routes.php
. In mod implicit, acest fisier contine o singura linie de cod (restul sunt comentarii):
$route['default_controller'] = "welcome";
Ruta pe care o vom adauga noi pentru transformarea URL-ului, arata asa:
$route['detaliu-produs/:any']='produs/detaliu';
Si acum sa explicam putin ce se intampla, ca sa putem trece mai departe. Sa luam mai intai primul URL si sa-l explicam, pentru cei care sunt mai noi in domeniul CodeIgniter. URL-ul: http://www.magazin.ro/produs/detaliu/23
apeleaza functia detaliu()
cu ID
-ul 23 din Controller-ul produs.php
.
Deci cum ne ajuta noua ruta in functionarea URL-ului nr. 2? Dupa cum observati, de cate ori in URL este scris detaliu-produs
urmat de orice altceva, CodeIgniter apeleaza functia detaliu()
din Controller-ul produs.php
.
Dar nu mai avem ID
-ul. Cum identificam produsul dorit? Simplu, presupunand ca informatia este adusa din baza de date, in primul caz o sa avem un query de genul:
$sql = "SELECT * FROM produs WHERE ID = " . $this->uri->segment(3);
Pentru mai multe detalii despre segmente, vezi articolul despre clasa URI in CodeIgniter.
Dar daca tabela produs, ar avea si un camp numit slug? Am putea ca la inregistrarea cu ID
-ul 23 sa avem un slug “telefon-mobil-android”. Astfel, noul query va arata asa:
$sql = "SELECT * FROM produs WHERE slug = " . $this->uri->segment(3);
Atentie! Va trebui sa va asigurati ca slug-ul este unic la fiecare inregistrare in parte.
Dupa cum vedeti, rutele sunt o unealta importanta un arsenalul pus la dispozitie de CodeIgniter. Folosite in mod corect, deschid un nou set de posibilitati in dezvoltarea de aplicatii dinamice.