Bonjour,

J'ai une simple question : Est-ce qu'il s'agit d'une bonne pratique que de faire une requête find('all') depuis l'appcontroller ?
Si je pose cette question c'est parce qu'il me faut avoir accès à une liste de "type de bien" qui sont enregistrés dans ma table "type_biens". Cette liste s'affichera sur le layout du site, plus précisément dans la zone de recherche.

Merci d'avance,

5 réponses


matspider
Réponse acceptée

Non, ce n'est pas une chose à faire, c'est même déconseiller par Cake, pour plusieurs raisons :

  • Mauvaise Optimisation

  • Si cette variable n'est pas nécessaire dans un layout particulier (Par exemple l'administration), il va quand même faire la requête

Un Exemple de ce qu'il faut faire :
Dans TypeBiensController.php :

public function gettypes(){
        $types = $this->TypeBien->find('all');
        $this->set('typesBiens',$types);
    }

Dans le layout :

<?php $typeBiens = $this->requestAction(array('controller'=>'typebiens','action'=>'gettypes')); ?>

à partir de la, dans la variables "$typeBiens", tu récupère la liste comme si tu était dans une action normale, donc tu peut y effectuer un foreach ...

Salut,

Je pense que le mieux, c'est de créer ton controller et un model associé a ta table "type_biens"

exemple :

TypeBiensController.php
et le model :
Typebien.php

Dans ton controller tu pourras faire $this->Typebien->find('all');
ou sinon dans un autre controller ( autre que appController ) mais tu devras dans ce cas préciser le Model utilisé avant de faire ta requête.

Controller::loadModel('tonModel');

En espérant t'avoir aider, bonne continuation

ps : vérifie le nom de fichier car je sais plus la rêgle avec un underscore ou change le nom de ta table

Je pense qu'il parle du fait de le récupérer dans le layout, le mieux est de faire ta fonction dans ton controller TypeBiensController.php puis dans le layout, de faire une requête :

$typeBiens = $this->requestAction(array('controller'=>'controller','action'=>'action'));

Merci de ta réponse @Yentia, mais comme le dit @matspider, je parlais du fait de pouvoir accéder à une valeur depuis le layout.
Hmm pour le moment, j'ai fait ceci :

  1. J'effectue dans l'action before filter du model une requête find all, et j'affecte le résultat de cette requête à une variable de session.
  2. Ensuite j'utilise cette variable de session dans le layout

Ma question est: Est-ce une bonne pratique ?

Merci @matspider pour ta réponse, j'ai mis cela en pratique et ça fonctionne parfaitement :)