2010-06-30 14 views
14

Ciao Sto configurando il routing dell'amministratore in CakePHP.Routing: 'admin' => true vs 'prefix' => 'admin in CakePHP

Questa è la mia rotta corrente:

Router::connect('/admin/:controller/:action/*', array('admin' => true, 'prefix' => 'admin', 'controller' => 'pages', 'action' => 'display', 'home')); 

Funziona bene, ma non capisco quale sia la differenza tra le 'admin' => vero, e 'prefisso' => 'admin' è.

Quando ho omesso 'prefix' => 'admin', il router non utilizzava admin_index e invece utilizzava semplicemente index. Allora, qual è il punto di 'admin' => true?

risposta

26

Impostando 'prefix' => 'admin' si sta dicendo a CakePHP che si desidera utilizzare un prefisso di admin per tale percorso; in pratica, significa che si desidera utilizzare le azioni e le viste del controller con nomi con prefisso admin_. Questa parte di cui sei già a conoscenza e le cose funzioneranno probabilmente con questo.

Durante la creazione di percorsi, però, tutte le chiavi degli array passati nel secondo argomento che non sono riconosciuti da CakePHP (es. Non la solita controller, action, plugin, prefix roba) vengono impostati come parametri denominati durante le richieste corrispondenti a questa strada.

L'aggiunta di 'admin' => true è quindi solo un parametro con nome in questo caso, ma presenta i suoi vantaggi. In primo luogo, può rendere il codice più sintetico.

/* Determine if a request came through admin routing */ 
// without: 
if ($this->params['prefix'] == 'admin') {} 
// with: 
if ($this->params['admin']) {} 

/* Create a link that is reverse-routed to an admin prefixed route */ 
// without: 
$html->link('...', array('prefix' => 'admin', 'controller' => 'users')); 
// with: 
$html->link('...', array('admin' => true, 'controller' => 'users')); 

In secondo luogo, fornisce la compatibilità all'indietro con l'instradamento modo amministratore lavorato in CakePHP 1.2 (l'ultima riga dell'esempio precedente è come si sarebbe fatto link di amministrazione di routing in 1.2). Pertanto, gli sviluppatori che migrano dalla versione 1.2 alla 1.3 possono impedire di dover modificare i collegamenti nell'intera applicazione mantenendo il flag nelle loro route (e aggiungendo lo 'prefix' => 'admin').

Infine, impostando un flag personalizzato come questo con un parametro con nome e utilizzandolo nell'applicazione invece di fare riferimento al percorso con una stringa esatta, significa che non puoi mai cambiare i collegamenti se cambi il prefisso in qualcosa altro (ad esempio da admin a administrator o edit) ... anche se questo è un punto controverso, poiché è necessario rinominare tutte le azioni e le viste del controller admin_*. :)

+0

Grazie, proprio quello di cui avevo bisogno – Rob

4
// Go into a prefixed route. 
echo $html->link('Manage posts', array('manager' => true, 'controller' => 'posts', 'action' => 'add')); 

// leave a prefix 
echo $html->link('View Post', array('manager' => false, 'controller' => 'posts', 'action' => 'view', 5)); 
+3

In 1.3, questo è il modo corretto di gestire il prefisso nei collegamenti. Ho i prefissi amministratore e curatore. basta fare 'curator' => true o 'admin' => true. L'aggiunta di 'prefix' => 'curator' non fa nulla. – Walker