Problème pour le tableauRouter:connect cakephp

Par codeindev, il y a 11 ans


Bonjour

je suis en train de faire un tableau pour récupérer et formater les urls mais je me retrouve avec un problème pour récupérer certain champs
voici ma route

Router::connect('/page/:slug-id',array('controller'=> 'pages','action'=>'show'),array('pass' => array ('id','slug')));

et en mode debug ma requête

object(CakeRequest) {
    params => array(
        'plugin' => null,
        'controller' => 'pages',
        'action' => 'show',
        'named' => array(
            'slug' => 'ma-premiere-page',
            'id' => '18'
        ),
        'pass' => array()
    )

je n'arrive pas à récupérer dans pass ces deux champs

'slug' => 'ma-premiere-page',
            'id' => '18'

Si vous avez une idée
Merci d'avance

2 réponses

Pakito, il y a 11 ans

Au niveau de ta route, il me semble qu'il y a une erreur sur la conception du routing.
Il faudrait :slug-:id, au lieu de :slug-id :

Router::connect('/page/:slug-:id',array('controller'=> 'pages','action'=>'show'),array('pass' => array ('id','slug')));

Cela devrait résoudre le problème.

codeindev, il y a 11 ans

ca fonctionne merci

Petite question j'ai vu pas mal de personne revenir sur un sujet que je traite une erreur lié au menu.ctp

Warning (2): Invalid argument supplied for foreach() [APP/View/Elements/menu.ctp, line 3]

et

Declaration of Post::afterFind() should be compatible with Model::afterFind($results, $primary = false) [APP/Model/Post.php, line 3]

Ma page controller

<?php
class PagesController extends AppController {
      public $uses = array('Post');
      function menu(){
         $pages = $this-> Post->find('all',array(
        'conditions' => array('type'=>'page','online'=>1)
         ));
         return $pages;
    }
      function show($id = null,$slug = null){
   }

}

mon Post.php

<?php
class Post extends AppModel{

    public function afterFind($data){
    foreach($data as $k=>$d){
    if (isset($d'Post']'slug']) && isset($d'Post']'id'])){
      $d'Post']'link'] = array(
      'controller' => 'pages',
      'action' => 'show' ,
      'id' => $d'Post']'id'],
      'slug' => $d'Post']'slug']
        );
     }

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

mon menu.ctp

<?php $pages = $this->requestAction(array('controller'=>'pages','action'=>'menu'));?>
<ul class="nav navbar-nav">
    <?php foreach($pages as $k=>$v): $v = current($v);?>
    <li> <?php echo $this->Html->link($v'name'],$v'link']);?></li>
     <?php endforeach; ?>
  </ul>

Je n'ai pas beaucoup trouver d'infos sur ce sujet

Cdt