Manual - mecànica de les URL

El Framework està pensat per a ser molt flexible i permetre desenvolupar molt ràpid, per a això permet diverses maneres de mapejar URLs.

Un arxiu al disc

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

Url mapper

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.

MVC /controller/action i l'estructura de paràmeters

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.


Definir Sections

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.


Tornar a la plana principal del Manual