CakePHP utilizza il metodo Controller::url() per interpretare una richiesta di url ed erogarla in modo corretto (ad esempio rispettando il sub-folding di applicazione) ed in generale per perfezionare l'url rewrite.
CakePOWER estende questo metodo fornendo un sistema più ampio di analisi ed interpretazione della stringa. Lo scopo è rendere ogni applicazione il più aperta e configurabile possibile.
NamedUrl è un sistema di configurazione che permette di chiamare una determinata url utilizzandone un nome. Il sistema si occupa di trasformare questo nome in una path reale.
// Url normale $this->Pow->url('/news/index/'); // NamedUrl $this->Pow->url('news');
Il sistema è ovviamente estendibile ed ogni plugin CakePOWER può definire le proprie url.
I nomi notevoli sono placeholder per alcuni parametri comuni a qualunque richiesta quali:
| Placeholder | Descrizione |
|---|---|
| /plug/ | Nome del plugin coinvolto nella richiesta |
| /ctr | Nome del plugin coinvolto nella richiesta |
| /act | Nome dell'azione coinvolta nella richiesta |
| /self | Ripetizione dell'url della richiesta in corso |
| /query | Querystring della richiesta in corso (sperimentale) |
Un esempio di chiamata utilizzando questi parametri può essere:
// La richiesta risponde all'url: // "/it/pizza_plugin/orders/add?name=margherita&qt=3" $this->Pow->url('/self/'); $this->Pow->url('/plug/ctr/index/'); $this->Pow->url('/plug/ctr/act?/query');
Il metodo PowComponent::url rende possibile accedere alle proprietà stesse definite a livello di controller:
if ( $this->Model->save($this->data) ) { $this->redirect("/ctr/view/{@ctr:Model.id}/"); }
E' possibile utilizzare una qualsiasi path DAC come placeholder di una url richiesta:
$this->Pow->url('/ctr/view/{@tmp.lastInsertId}/');
Se la path richiesta non esiste o è vuota il parametro viene completamente ignorato. E' quindi utile utilizzare la tecnica dei parametri nominali (name:value).
Le variabili esplicite sono formate dalle chiavi di un array DAC che può essere popolato prima di chiamare un comando di url.
L'array utilizzato è “tmp.url” ed è possibile utilizzarlo in svariati modi.
// Redirect configurabile dopo un salvataggio: JC::write('tmp.url.id',$this->Model->getLastInsertId()); $this->redirect('/ctr/view/{@id}');
Prima di interpretare gli eventuali placeholders presenti nella path con le chiavi dell'array DAC quest'ultimo viene esteso con le eventuali variabili passate attraverso la configurazione del metodo stesso:
$this->Pow->url('/ctr/view/{@id}',array( 'vars' => array( 'id' => $this->Model->getLastInsertId() ) ));
NOTA: questa tecnica è molto utile se si utilizza una configurazione DAC come path per una url.
Vengono inoltre utilizzati parametri nominali di url di CakePHP per popolare DAC{tmp.url}:
// Richiesta in corso: // "/users/view/name:marco/surname:pegoraro" $this->redirect('/users/edit/{@name}/{@surname}');
Anche i paretri non nominali possono essere utilizzati:
// Richiesta in corso: // "/users/view/marco/pegoraro" $this->redirect('/users/edit/{@p1}/{@p2}');