instradamento CakePHP con params opzionali
Domanda
Ho un metodo nel mio controller utenti simile a:
function members($type = null, $category = null) { ... }
Entrambi i parametri sono opzionali e possono essere utilizzati insieme o da soli.
Quindi, con il seguente itinerario.
Router::connect('/members/*', array('controller' => 'users', 'action' => 'members'));
http://example.com/users/members
diventa successo http://example.com/members
.
Purtroppo il seguente non funzionano
http://example.com/members/type:cat
http://example.com/members/category:dog
http://example.com/members/type:cat/category:dog
come ho potuto configurare miei percorsi in modo che tutto il lavoro correttamente?
Soluzione
parametri denominati non sono mappati automagicaly all'azione. È possibile ottenere loro chiamando
$ this-> passedArgs [ 'type'] o $ this-> passedArgs [ 'categoria']
oppure utilizzando il terzo parametro nel Router :: Connect:
Router::connect(
'/members/*',
array('controller' => 'users', 'action' => 'members'),
array(
'pass' => array('type', 'category')
)
);
Altri suggerimenti
Prova con
Router::connect('/members/type\:(.*)', array('controller' => 'users', 'action' => 'members_type'));
Router::connect('/members/category\:(.*)', array('controller' => 'users', 'action' => 'members_category'));
Router::connect('/members/type\:(.*)/category:(.*)', array('controller' => 'users', 'action' => 'members_type'));
Si noti che non ho la prova, ma penso che si deve sfuggire i due punti.