come memorizzare un array nel controller e utilizzarlo nel file di visualizzazione in cakephp

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

  •  05-07-2019
  •  | 
  •  

Domanda

Nel mio controller Utenti, trovo il numero di moduli che l'utente ha creato interrogando la tabella "Moduli" e lo memorizzo in un array. Ma come utilizzare le variabili di matrice nel file di visualizzazione.

Normalmente, imposterei la variabile nel controller usando la funzione set e la userei nel file di visualizzazione in quanto tale. Ma come impostare un array nel controller? Ottengo i valori nel controller (ha fatto un'eco).

Il mio codice controller è:

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;
}

Il mio file di visualizzazione:

<?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;?>

Dato che ho archiviato il valore in un $ userFormCount variabile nel controller, non ottengo il valore nel file di visualizzazione. ma come impostare e ottenere un valore di array?

È stato utile?

Soluzione

Prima di tutto dovresti evitare di ripetere le chiamate di funzione.

Le prime due righe della tua funzione possono essere sostituite da:

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

Successivamente puoi modificare l'oggetto prima di passarlo per visualizzare e aggiungere la proprietà che stai calcolando a quell'oggetto.

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);
}

e puoi quindi usarlo nella tua vista come qualsiasi altro campo che ottieni dal database. Per migliorarlo ulteriormente, potresti prendere in considerazione l'idea di spostare questo codice in un callback afterFind nel tuo modello User , almeno se questi valori personalizzati vengono utilizzati più di una volta.

Altri suggerimenti

Sai già come impostare un valore di array :-)

In questo codice si sta impostando l'array 'utenti'

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

Quindi puoi fare lo stesso per l'altro array:

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

... e leggilo allo stesso modo della variabile utente.

Ma per favore guarda la risposta di RaYell, perché spiega come migliorare il tuo codice attuale.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top