Bonjour.
moi je souhaite : /annuaire/1-libellecategorie/dep:86/bleu
Il te faut éviter de vouloir mettre : dans l'url, car dans le routing de CakePHP, le caractère : sert d'identifiants pour les paramètres passées dans l'url, ce qui ferait ceci pour matcher l'url : /annuaire/:id-:slug/dep::dep/:option.
Comme tu peux le voir, ça ferait deux fois le caractère : placé consécutivement, ce qui risque de poser des problèmes pour matcher l'url pour le routing, si tu veux tu peux par exemple remplacer par : /annuaire/:id-:slug/dep.:dep/:option ce qui donnerait par exemple /annuaire/1-libellecategorie/dep.86/bleu.
quand j'applique ta recommandation, j'ai bien /annuaire/1-libellecategorie/86/bleu mais la page est identique à /annuaire/1-libellecategorie
Il ne te faut pas oublier de bien prendre en compte les paramètres qui sont dans l'url ou non et de faire la requête SQL correspondante.
Par exemple :
public function index($id = null, $slug = null, $dep = null, $option = null)
{
$conditions = [];
if (!is_nul($option)) {
$conditions = array_merge($conditions, ['option' => $option]);
}
if (!is_null($dep)) {
$conditions = array_merge($conditions, ['dep' => $dep]);
}
if (!is_null($slug) {
$conditions = array_merge($conditions, ['dep' => $dep]);
}
if (!is_null($id) {
$conditions = array_merge($conditions, ['slug' => $slug]);
}
if ($conditions) {
$agregats = $this->Agregat->find('all', ['conditions' => $conditions]);
} else {
$agregats = $this->Agregat->find('all');
}
// Suite du code ...
}