Bonjour, je voudrais savoir comment faire pour coder la gestion des slugs sans ID sous CakePHP ?

http://localhost/dev/1/page/mon-premier-titre

a la place de ce que l'on trouve dans le tuto de GA

http://localhost/dev/1/page/mon-premier-titre-1

3 réponses


Inspirat
Réponse acceptée

Rien de bien compliqué, il suffit de modifier 3 fichiers, mais attention, chaque slug doit être unique pour que ça fonctionne bien, donc pense à vérifier lors de la création d'un article que le slug généré soit unique (et donc soit d'adapter le slug, soit d'avoir un nom d'article unique).

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

// app/Controller/PostsController.php
public function view($slug) {
    if(empty($slug)) {
        throw new NotFoundException();
    }

    $post = $this->Post->find('first', array(
        'conditions' => array('Post.slug' => $slug),
    ));
    if(!$post){
        throw new NotFoundException();
    }
    $this->set(compact('post'));
}

// app/View/posts/index.ctp
<?= $this->Html->link(__('En savoir plus'), array('controller' => 'posts', 'action' => 'view', 'slug' => $post['Post']['slug'])); ?>

Bonjour,

il suffit de rendre ton champ slug unique en base et obligatoire. Tu requêtes ensuite dessus.

sylvain
Auteur

Merci beaucoup @inspirat