comment stocker un tableau dans le contrôleur et l'utiliser dans le fichier view dans Cakephp

StackOverflow https://stackoverflow.com/questions/1410423

  •  05-07-2019
  •  | 
  •  

Question

Dans mon contrôleur d'utilisateurs, je trouve le nombre de formulaires créés par l'utilisateur en interrogeant la table "Formulaires" et les stocke dans un tableau. Mais comment utiliser les variables de tableau dans le fichier de vue.

Normalement, je définirais la variable dans le contrôleur à l’aide de la fonction set et l’utiliserais dans le fichier vue en tant que telle. Mais comment définir un tableau dans le contrôleur? Je reçois les valeurs dans le contrôleur (fait un écho).

Le code de mon contrôleur est:

function users(){

   $this->set('users',$this->User->find('all'));
   $users=$this->User->find('all');
   foreach($users as $user):

     $id=$user['User']['id'];
     $userFormCount[$id]=$this->Form->find('count',array('conditions'=>array('Form.created_by'=>$user['User']['id'])));
     $userFormCount[$id]=$this->Form->find('count',array('conditions'=>array('Form.created_by'=>$user['User']['id'])));      
     echo "users : ".$id."  ".$userFormCount[$id];

   endforeach;
}

Mon fichier de vue:

<?php foreach($users as $user):?>

   <tr>
  <td class="people_profile">

         <a href="/users/angeline"><?php echo $user['User']['name'];?></a>
      </td>

     <td>
    <?php 
    $id=$user['User']['id'];
    echo $userFormCount[$id]." ";?>forms,   //need the array value here.
    0 reports,
    0 badges
  </td>
 </tr>
<?php endforeach;?>

Étant donné que j'ai stocké la valeur dans un varaible $ userFormCount dans le contrôleur, je ne reçois pas la valeur dans le fichier de vue. mais comment définir et obtenir une valeur de tableau?

Était-ce utile?

La solution

Tout d’abord, évitez de répéter vos appels de fonction.

Les deux premières lignes de votre fonction peuvent être remplacées par:

$users=$this->User->find('all');
$this->set('users', $users);

Vous pouvez ensuite modifier votre objet avant de le transmettre à la vue et ajouter la propriété que vous calculez à cet objet.

function users(){

    $users=$this->User->find('all');

    // notice the & here
    foreach($users as & $user):

       // you are repeating the same line here as well, that's not necessary
       $user['User']['custom_field'] = $this->Form->find('count', 
           array('conditions'=>array('Form.created_by'=>$user['User']['id'])));
    endforeach;

    $this->set('users', $users);
}

et vous pouvez ensuite l'utiliser dans votre vue comme n'importe quel autre champ de la base de données. Pour l'améliorer encore, vous pouvez envisager de déplacer ce code vers un rappel afterFind dans votre modèle Utilisateur , au moins si ces valeurs personnalisées sont utilisées plus d'une fois.

Autres conseils

Vous savez déjà comment définir une valeur de tableau: -)

Dans ce code, vous définissez le tableau 'utilisateurs'

$this->set('users',$this->User->find('all'));

Vous pouvez donc faire la même chose pour l'autre tableau:

$this->set('userFormCount',$userFormCount);

... et lisez-le de la même manière que votre variable d'utilisateurs.

Mais regardez la réponse de RaYell, car elle explique comment améliorer votre code actuel.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top