Roteamento Cakephp com parâmetros opcionais
Pergunta
Eu tenho um método no meu controlador de usuários semelhante a:
function members($type = null, $category = null) { ... }
Ambos os parâmetros são opcionais e podem ser usados juntos ou sozinhos.
Então, com a seguinte rota.
Router::connect('/members/*', array('controller' => 'users', 'action' => 'members'));
http://example.com/users/members
torna-se com sucesso http://example.com/members
.
Infelizmente o seguinte não funciona
http://example.com/members/type:cat
http://example.com/members/category:dog
http://example.com/members/type:cat/category:dog
como eu poderia configurar minhas rotas para que todas funcionassem corretamente?
Solução
Os parâmetros nomeados não são mapeados automaticamente para a ação.Você pode obtê-los ligando para
$this->passedArgs['type'] ou $this->passedArgs['category']
ou usando o terceiro parâmetro em Router::connect:
Router::connect(
'/members/*',
array('controller' => 'users', 'action' => 'members'),
array(
'pass' => array('type', 'category')
)
);
Outras dicas
Experimente com
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'));
Observe que não testei, mas acho que você deve escapar dos dois pontos.