Salut à tous, voilà en bidouillant un peut pour faire fonctionné une fonction Auth, j'ai changer une ligne de routing, malheureusement je n'arrive plus à revenir sur mon code qui marchais..

Alors voici ma ligne actuelle de route :

Router::connect('posts/:slug-:id',array('controller'=>'posts','action'=>'show'),array(
        'pass'=> array('slug','id'), 'slug'=>'[a-z0-9\-]+','id' =>'[0-9]+'));

et donc quand je rentre une adresse du type de la route :

/CakePHP/posts/jftyu-36

j'ai l'erreur "The action jftyu-36 is not defined in controller PostsController" alors que dans mon routing j'ai défini l'action show.

Si quelqu'un pouvais m'aider ?

J'en profite comme je suis assez débutant sur CakePHP pour savoir si il y à quelque chose à faire pour éviter les injections sql?

Merci à vous

8 réponses


Grimp
Auteur
Réponse acceptée

Ok c'est bon j'ai trouver! J'ai pas tout bien compris mais $id me retourné le slug et $slug l'id...

J'ai juste inversé

function show($id = null,$slug = null)

par

function show($slug = null,$id = null)

Salut,

Dans ton routing ajoute un slash au départ :

Router::connect('/posts/:slug-:id',array('controller'=>'posts','action'=>'show'),array(
        'pass'=> array('slug','id'), 'slug'=>'[a-z0-9\-]+','id' =>'[0-9]+'));

Pour ce qui est des injections SQL si tu utilises les tableaux dans tes conditions pas de problème.

Birzat

Grimp
Auteur

Avec le slash j'ai cette erreur qui s'affiche :

"The requested address '/CakePHP/posts/jftyu-36' was not found on this server."

Grrr pourquoi j'ai pas sauvegardé un fichier...

tu peut mettre ca avec une * a la fin:

Router::connect('/posts/:slug-:id/*',array('controller'=>'Posts','action'=>'show'),
array('pass' => array('slug','id'),'slug'=>"[a-z0-9_\-]+",'id' => '[0-9]+'));

C'est bizarre, le routing semble bon.

Quelques questions :
Peux-tu montrer ta methode "show" de ton controller posts
As-tu d'autres routes ?
Quelle est l'URL complète ? Avant .../CakePHP/posts/jftyu-36

Birzat

Grimp
Auteur

Vraiment bizarre :/
Voici la méthode show

function show($id = null,$slug = null){
        if(!$id)
            throw new NotFoundException('Aucune page ne correspond à cet ID');
        $page = $this->Post->find('first',array(
            'conditions' => array('id' =>$id,'type'=>'post')
            ));
        if(empty($page))
            throw new NotFoundException('Aucune page ne correspond à cet ID');
        if($slug != $page'Post']'slug'])
            $this->redirect($page'Post']'link'],301);
        $d'page'] = current($page);
        $this->set($d);
    }

Oui j'ai d'autres routes, qui marche très bien!

Router::connect('/', array('controller' => 'Cartes', 'action' => 'index'));
    Router::connect('/admin',array('controller'=>'posts','action'=>'index','admin'=>true));
    Router::connect('/posts/:slug-:id',array('controller'=>'posts','action'=>'show'),array(
        'pass'=> array('slug','id'), 'slug'=>'[a-z0-9\-]+','id' =>'[0-9]+'));
    Router::connect('/regions/:slug/:id',array('controller'=>'posts','action'=>'produit'),array(
        'pass'=> array('slug','id'), 'slug'=>'[a-z0-9\-]+','id' =>'[0-9]+'));
    Router::connect('/regions/:slug/:id/:slug2/:id2',array('controller'=>'posts','action'=>'article'),array(
        'pass'=> array('slug','slug2','id'), 'slug'=>'[a-z0-9\-]+','slug2'=>'[a-z0-9\-]+','id' =>'[0-9]+'));

Et je suis en localhost donc l'url c'est juste localhost avant!
Peut être une erreur autre par que sur les routes ?
Merci de l'aide en tout cas!

Grimp
Auteur

En cherchant, la route fonctionne bien, l'erreur vient apparemment de la function

Grimp
Auteur

Un problème avec l'$id apparemment dans la function

$page = $this->Post->find('first',array(
            'conditions' => array('id' =>$id,'type'=>'post')
            ));

ne trouve pas l'id il faut que j'utilise

$this->params'id']

à la place de $id
mais je tombe ensuite sur une boucle infini en rajoutant le reste du code