El Framework està pensat per a ser molt flexible i permetre desenvolupar molt ràpid, per a això permet diverses maneres de mapejar URLs.
Com hem discutit a la secció getting started l'arxiu .htaccess us permet afegir a la carpeta www/ i serà servit amb normalitat, així que la primera via per a afegir contingut és simplement pujar-lo al sistema d'arxius (a la carpeta www/). Per exemple sitemap.xml pot ser simplement copiat l'arrel del servidor web
Si no necessiteu suport multi-llenguatge per a una url, per exemple, voleu servir el mateix contingut a /humans.txt per a tots els llenguatges podeu mapejar aquesta url per a ser gestionada pel framework i ser llegida d'algun altre arxiu al sistema d'arxius.
Editeu init/commonrequests.class.php i aquestes línies al mètode registerURLS:
Navigation::addURL('humans.txt', '/mnt/unaltreindretaldisc/humans.txt', Navigation::ACTION_REQUIRE_FILE, ControllerBase::RESPONSE_TEXT, ControllerBase::CACHE_NO_CACHE);
ControllerBase::CACHE_NO_CACHE especifica que les capceleres seran enviades de manera que el navegador del client no catxegi el resultat.
Podeu servir arxius binaris, JSON, etc... simplement useu la constant ControllerBase::RESPONSE_JSON, ControllerBase::RESPONSE_TEXT o ControllerBase::RESPONSE_TEXTHTML...
Podeu especificar l'arxiu per a ser recuperat d'un altre indret del disc amb Navigation::ACTION_REQUIRE_FILE, però podeu fer que sigui una funció la que s'executi, per exemple:
Navigation::addURL('humans.txt', 'send_humans_file', Navigation::ACTION_CALL_FUNCTION, ControllerBase::RESPONSE_TEXT, ControllerBase::CACHE_NO_CACHE);
Així en el darrer cas la funció "send_humans_file()" serà cridada quan l'arxiu humans.txt sigui cridat.
Si curl és actiu Navigation::ACTION_REQUIRE_URL pot ser emprat i el Framework agafarà la url especificada al segon paràmetre.
Com s'ha indicat el Catalonia Framework mira d'ajudar a desenvolupar molt ràpid, així que es proveix un sistema per defecte per a carregar Controllers fàcilment.
Si teniu un Controller anomenat Forums i una Action anomenada actionListForums (la paraula precedent action a actionListForums és necessària) podeu cridar-lo des de la web així:
http://www.cataloniaframework.com/ca/forums/listforums
Així de simple.
Si crideu http://www.cataloniaframework.com/ca/forums llavors s'intentarà carregar Forums::indexAction. S'espera que proporcioneu un mètode indexAction per a tots els vostres Controllers.
Si crideu:
http://www.cataloniaframework.com/ca/forums/listforums/order/asc/newer_than/2013
Or en el cas que opereu en el mode no multi-llenguatge:
http://www.cataloniaframework.com/forums/listforums/order/asc/newer_than/2013
Llavors Forums::listForums will serà cridat i se li proveirà de $st_params que és un array com:
Array( 0 => 'order', 1 => 'asc', 2 => 'newer_than', 3 => '2013')
De cara a fer encara més fàcil treballar amb paràmetres un altre array serà proporcionat al Controller, és $st_params_url que és un array en parells com:
Array( 'order' => 'asc', 'newer_than' => '2013);
Si us plau considereu que els noms dels Controllers són sanititzats amb l'expressió regular a Strings::getSanitizedControllerName($s_name):
$s_sanitized= preg_replace('/([^a-z0-9])/', '', $s_name);
Les Array injections als paràmetres també són remogudes, així només Strings seran passades al Controller
Així doncs una crida usual a l'Action del Controller és com:
public function actionIndex($s_url = '', $st_params = Array(), $st_params_url = Array(), $o_db = null) {
Si el Controller no existeix una Exception serà llençada i capturada a index.php i una plana d'error es mostrarà.
Una View per defecte és proporcionada views/errors/errorgeneric.php , i tots els errors poden ser customitzats.
El Framework proporciona una manera addicional per a tractar amb Urls. Normalment totes les webs tenen seccions, i han de ser enllanced des de altres punts de la web. I és fàcil trencar aquests enllaços amb el canvi de nom d'una plana (per exemple per motius SEO).
Per a solventar aquest problema el Frameworks ofereix un mecanisme Section. A partir de la classe Section podeu enregistrar una secció, i demanar la url d'aquesta secció més tard, i la rebreu independentment del llenguatge de l'usuari.
Això es fa a commonrequests.class.php, al mètode:
public static function registerSections($o_db = null) {
Per a definir una secció manual, que té la mateixa adreça URL per a tots els llenguatges al vostre lloc web farieu:
Section::registerSection('manual', $s_prefix.'manual', 'Manual', 'Index');
Així definirieu una Section identificada per 'manual', que respondria amb /[LANG]/manual o /manual depenent de si el multi-llenguatge és activat, i cridaria la classe Manual i mètode Index (actionIndex)
Si voleu usar diferent adreces URLs, per SEO, per als diferents llenguatges per a la secció download procedirieu així:
Section::registerSection('download', $s_prefix.t('seo_url_download'), 'Download', 'Index');
A la carpeta translations/ disposeu d'arxius de traducció i la clau (key) 'seo_url_download'. A cada arxiu d'idioma disposeu d'un valor per al llenguatge.
Les Sections poden ser associades als objectes Menu per a crear menus, com a la DemoApp.