Bonjour,

Je suis entrain de développer une administration et j'ai un petit soucis puisque j'utilise une méthode actuelle que je pense est 'barbare'. Il doit exister une meilleur méthode je pense.

Je dois arriver a un lien égale à :

  • index : site.fr/dashboard/parcours/events
  • add : site.fr/dashboard/parcours/events/add
  • update : site.fr/dashboard/parcours/events/update/1
  • delete : site.fr/dashboard/parcours/events/delete/1

Voilà et pour l'instant j'utilise un switch avec un argument :
(Tout ce code se situe dans 'ParcoursController').

public function dashboard_events($action = 'index', $id = null){
            $this->set('action', $action);

            switch($action){
                case 'index':

                    $d = $this->Articles->find('all', array('conditions' => array(
                                                                            'Articles.type' => 'event')));
                    $this->set('articles', $d);

                    break;
                case 'add':

                    break;
                case 'delete':

                    break;
                case 'update':

                    debug($this->request->params);

                    break;

            }

        }

Donc dans la vue je dois aussi utiliser le switch :

<?php

    switch($action){
        case 'index': ?>

<?php       
            break;
        case 'delete': ?>

<?php
            break;
        case 'add': ?>

    add

<?php
            break;
        case 'update': ?>

<?php
            break;
    }
?>

Merci beaucoup de votre aide.

Si vous avez des idées, si je fais mal des choses comme les liens pour supprimer les 'posts'. Je suis preneur.

3 réponses


Bonjour.
Pour l'action dans le controller, tu peux garder ce code, par contre, pour la vue tu pourrais rendre sur une vue différente selon l'action demandée si celle-ci n'est pas l'action index (voir Rendre une vue spécifique).
Ce qui t'évitera de faire un switch dans l'action du controller et dans la vue.

Pourquoi ne pas utiliser une route relié à une méthode pour chaque action ?

@Onouriis n'a pas tort !
Plutôt que de briser la convention de CakePhp, la configuration des routes serait la solution pour ton cas.

Attention version 3 de cakephp (à voir quand même la config des routes pour la version 2)

Dans ton fichier routes.php :

    $routes->connect('/dashboard/parcours/events/', ['controller' => 'Articles', 'action' => 'index']);
    $routes->connect('/dashboard/parcours/events/add', ['controller' => 'Articles', 'action' => 'add']);
    $routes->connect('/dashboard/parcours/events/edit/:id',['controller' => 'Articles', 'action' => 'edit'],['pass' => ['id'],'id' => '[0-9]+']);
    $routes->connect('/dashboard/parcours/events/delete/:id',['controller' => 'Articles', 'action' => 'delete'],['pass' => ['id'],'id' => '[0-9]+']);

Voilà, bon cela c'est une chose, mais cela ne résoud pas réellement ton application.
Car en voyant ton slug "dashboard" j'imagine qu'un utilisateur est loggé ?

L'idéal c'est qu'une fois loggé (AuthComponent) , on applique la route de préfixe.
je t'invite à jetter un oeil sur ce lien, tu pourras t'amuser

http://book.cakephp.org/3.0/fr/development/routing.html#prefix-routing