Domanda

è il mio primo post qui:)

sto avendo qualche difficoltà con trattare con gli URL e parametri. Ho passato attraverso la documentazione delle API di classe router più e più volte e ho trovato nulla di utile.

Prima di tutto, vorrei sapere se c'è qualsiasi formato 'universale' in CakePHP (1.3) per la gestione di URL. Sono attualmente la gestione di tutti i miei URL come array semplici (nel formato che puntano Router :: URL e $ HTML-> accetta) ed è facile fino a quando ho solo bisogno di passarli come argomenti a propri metodi di torta. E di solito diventa difficile se ho bisogno di qualcosa di diverso.

Principalmente sto avendo problemi con la conversione gli URL di stringa per il formato di base array. Diciamo che voglio convertire $ arrayUrl a stringa e poi di nuovo in url:

$arrayUrl=array('controller'=>'SomeController','action'=>'someAction','someValue');
$url=Router::url($arrayUrl);       //$url is now '/path/to/site/someController/someAction/someValue'
$url=Router::normalize($url);      //remove '/path/to/site'
$parsed=Router::parse($url);       /*$parsed is now
Array(
    [controller] => someController
    [action] => someAction
    [named] => Array()
    [pass] => Array([0] => someValue)
    [plugin] => 
) */

Questo sembra un sacco di codice per fare qualcosa di semplice come per la conversione tra i formati 2 core. Si noti inoltre che $ analizzato non è ancora nella stessa da $ arrayUrl. Naturalmente potrei modificare $ analizzato manualmente e in realtà ho fatto un paio di volte come un rapido patch, ma mi piacerebbe andare a fondo di questo.

Ho anche notato che quando si utilizza il routing prefisso, $ this-> params nel controllore ha il prefisso incorporato nell'azione (cioè. [Azione] => 'admin_edit') ed il risultato di Router :: parse () non. Entrambi, naturalmente, hanno il prefisso nella propria chiave di esso.

In sintesi, come faccio a convertire un URL tra uno di questi 3 (o 4, se si include la cosa prefisso) menzionato formati nel modo giusto? Certo sarebbe facile per incidere il mio modo attraverso questo, ma mi piace ancora di credere che la torta è stato sviluppato da un gruppo di persone che hanno molta più esperienza e conoscenza di me, quindi immagino ci sia una buona ragione di questo "comportamento scorretto percepita".

ho cercato di presentare il mio problema buono come posso, ma a causa di mio inglese arrugginito, ho dovuto prendere alcune deviazioni :) mi spiego di più se necessario.

È stato utile?

Soluzione

Il formato "ufficiale" per la torta URL dovrebbe essere il array('controller' => 'foo', 'action' => 'bar', 'baz', 'admin' => true) serie di notazione. Ogni volta che si scrive URL, è necessario utilizzare questo formato. La classe di router si tradurrà quelli di entrambi stringhe (/admin/foo/bar/baz) o le informazioni necessarie per il Dispatcher (array('named' => array(), 'pass' => array(), …)), a seconda di dove viene utilizzato l'URL.

Si dovrebbe pensare ad esso in termini di quale azione di controllo che si desidera richiamare. URL (come stringhe) sono solo un male necessario per raggiungere questo obiettivo in un contesto web. Non ci dovrebbe essere alcun bisogno di di utilizzare il formato di Dispatcher. Non si dovrebbe anche usare la notazione di stringa quando si specificano gli URL, dal momento che questi non possono essere reverse-instradati se mai voglia di cambiare il vostro schema URL.

Forse si potrebbe spiegare con un esempio perché è necessario convertire queste tre forme da uno all'altro?

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top