Je voudrais factoriser et avoir les inconvenients de faire comme ceci ?

<?php
... PagesController ...
private function viewCommun()
        {
            ...                
            $this->set(compact('data'));
        }

    public function home()
    {
                ... // je fais d'autres chose la
        $this->viewCommun();
    }

    public function faq()
    {
        ... // je fais d'autres chose ici
                $this->viewCommun(); 
    }

6 réponses


Si je comprends bien, tu as deux actions qui font la même chose c'est ça ? Quel est l'intérêt du coup ?

sylvain
Auteur

C'est juste un schéma ,
Évidement il y a beaucoup plus de méthodes et ils ne font pas la même chose

Donc si moi je comprends bien, tu balances 8 lignes d'un code profondément incomplet vu qu'il y a un nom de classe et 3 méthodes d'une ligne qui font strictement la même chose, et tu demandes des avis ... et si on te dis que ce code ne sert a rien, tu réponds que c'est normal c'est juste qu'il en manque des morceaux.

Tu veux un avis sur quoi exactement, le nom de tes méthodes ?

sylvain
Auteur

Je voudrais savoir s'il y a un inconvénient à mettre le setview qu'une seule fois dans une méthode private . Je ne voulait noyer dans trop de détail car ça aurait pu amener d'autres pistes et d'autres interprétation .

Ce qui me gêne ici , c'est d'avoir le set qu'à un seul endroit et qu'il faille préparer toutes les données dans chaque méthode et l'envoyer en paramètre à la méthode commune. Ce qui a mon avis supprime du code répété .

ok, ça reste un peu vague encore mais je vais te donner mon avis au maximum.

je préfère mettre le setview dans l'action, ça permet de voir directement quelle est la vue appelée en lisant l'action, sans être à chercher dans tout le code, quitte à redonder cette information dans plusieurs actions.

Pour les ... que tu mets dans la méthode viewCommun(), je suppose qu'il s'agit des opérations à réaliser avant l'envoi de données à la vue.
1) s'il s'agit d'une opération sur un ou plusieurs objets, l'opération doit aller dans le Model correspondant
2) s'il s'agit de récupérer des objets de plusieurs models, ça reste dans le Controller, à voir s'il est utile de refactorer ou pas.

Enfin dernier point, je te conseille d'utiliser l'anglais en permanence dans le nommage (de variables, de méthodes, de classes, ...), ça permet de mieux coller au framework, c'est plus facile pour toi car pas besoin de s'embêter avec les accents, le nom de bdd, .... et ça permet à des devs d'autres nationalités de comprendre ton code (si tu le mets sur une plate-forme en open source par exemple).

Comme tu le vois, mes explications sont assez vagues car il y a plusieurs réponses possibles et vu qu'il n'y a pas d'exemple, je ne peux aller plus loin dans le raisonnement.

[HS] : Un dernier conseil que je peux donner, il faut toujours se poser la question "A qui dois je donner la responsabilité de cette opération ?", ça te permettra de savoir où placer ta méthode.

sylvain
Auteur

Merci pour ces explications, ce que j'aimais dans cet appel a la vue commun, c'est d'avoir a l'écrire qu'une seule fois. C'est vrai que c'est moins clair du coup a quel template on fait appel.