Bonjour,

Comment definir plusieurs categories pour differents controllers? Le tutoriel explique seulement comment faire pour le controller 'Posts' mais moi J'en ai trois: Posts, Resources et Forum mais les categories sont les mêmes pour tout les trois controllers.

Voici les codes de la fonction afterFind du Model Category comme ça l'est dans le tutoriel

public function afterFind($data, $primary = false){
    foreach ($data as $k => $d) {

    if (isset($d'Category']'slug']) && isset($d'Category']'id'])) {
        $d'Category']'link'] = array(
            'controller'=>'Posts',// Comment changer cette ligne pour qu'elle prenne le controller actuel automatiquement?
            'action'=>'category',
            'slug'=>$d'Category']'slug'] 
            );
    }
    $data$k] = $d;
}
return $data;
}

Merci.

7 réponses


zkiller
Réponse acceptée
public function afterFind($data, $primary = false){
    foreach ($data as $k => $d) {

    if (isset($d'Category']'slug']) && isset($d'Category']'id'])) {

        $d'Category']'link'] = array(
            'controller'=>$this->params'controller'],
            'action'=>'category',
            'slug'=>$d'Category']'slug']

            );
    }
    $data$k] = $d;
}

return $data;

}
Kareylo
Réponse acceptée

C'est normal que tes routes ne fonctionnent pas, elles ont toutes le même lien, essaies plutôt ceci :

//routes.php
 Router::connect('posts/category/:slug', array('controller'=>'posts','action'=>'category'),array('pass'=>array('slug'),'slug'=>'[a-z0-9\-]+'));
   Router::connect('ressources/category/:slug', array('controller'=>'resources','action'=>'category'),array('pass'=>array('slug'),'slug'=>'[a-z0-9\-]+'));
    Router::connect('forum/category/:slug', array('controller'=>'forum','action'=>'category'),array('pass'=>array('slug'),'slug'=>'[a-z0-9\-]+'));

J'ajouteais aussi a cette question l'action :)

Ca m'interesse aussi

Merci

Fais en un Behavior car depuis un Behavior tu pourra avoir le controller qui l'appel et surment l'action aussi.

Je sais pas si ça marchera mais c'est une piste.

Une autre piste, dans le controller :
tu peux récupérer le nom de ton controller avec : $this->request'controller'] (et le passer dans les paramètres), je ne sais pas si cette méthode est très propre
De même pour l'action : $this->request'action']

Merci beaucoup zkiller,
ça marche, mais maintenant comment faire pour le routing dans 'routes.php'.
J'ai essayé avec ça mais ça ne marche qu'avec le controller posts seulement. Je pense que le routing ne considère que la première ligne.

//routes.php
 Router::connect('/category/:slug', array('controller'=>'posts','action'=>'category'),array('pass'=>array('slug'),'slug'=>'[a-z0-9\-]+'));
   Router::connect('/category/:slug', array('controller'=>'resources','action'=>'category'),array('pass'=>array('slug'),'slug'=>'[a-z0-9\-]+'));
    Router::connect('/category/:slug', array('controller'=>'forum','action'=>'category'),array('pass'=>array('slug'),'slug'=>'[a-z0-9\-]+'));

Merci beaucoup Kareylo!