wie ein Array in der Steuerung zu speichern und in der Ansicht Datei in cakephp verwenden

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

  •  05-07-2019
  •  | 
  •  

Frage

In meinem Benutzer Controller finde ich die Anzahl der Formulare, die der Benutzer durch Abfrage der ‚Forms‘ Tabelle und speichern sie in einem Array erstellt wird. Aber wie die Array-Variablen in der View-Datei verwenden.

Normalerweise würde ich die Variable in der Steuerung mit Set-Funktion eingestellt und in der View-Datei als solche verwendet wird. Aber, wie ein Array in der Steuerung eingestellt? Ich erhalte die Werte in der Steuerung (ein Echo hat).

Mein Controller-Code ist:

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

Meine Ansicht Datei:

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

Da ich den Wert in einem varaible $ userFormCount im Controller gespeichert sind, habe ich nicht den Wert in der View-Datei erhalten. aber wie zu setzen und einen Array-Wert zu erhalten?

War es hilfreich?

Lösung

Zu allererst sollten Sie vermeiden, Ihre Funktion Anrufe zu wiederholen.

Die ersten zwei Zeilen Ihrer Funktion kann ersetzt werden durch:

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

Als nächstes Sie Ihr Objekt ändern kann, bevor er die Eigenschaft anzuzeigen, und fügen Sie zu diesem Objekt berechnet wird.

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

und Sie können es dann in der Ansicht verwenden wie jedes anderes Feld, das Sie aus der Datenbank erhalten. Zur Verbesserung der es sogar firther Sie in Ihrem afterFind Modell zu einem User Rückruf diesen Code bewegen betrachten möchten, zumindest wenn diese benutzerdefinierte Werte mehr verwendet werden, dann einmal.

Andere Tipps

Sie wissen bereits, wie ein Array-Wert eingestellt werden: -)

In diesem Code, den Sie setzen die Array 'Benutzer'

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

So können Sie das gleiche für das andere Feld tun können:

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

... und es auf die gleiche Art und Weise wie Ihre Benutzer Variable lesen.

Aber schauen Sie bitte auf RaYell Antwort, weil es erklärt, wie Sie Ihren aktuellen Code besser machen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top