0

私のユーザー コントローラーでは、「フォーム」テーブルをクエリして、ユーザーが作成したフォームの数を見つけ、それを配列に格納します。しかし、ビューファイルで配列変数を使用する方法。

通常、 set 関数を使用してコントローラーで変数を設定し、それをビューファイルでそのまま使用します。しかし、コントローラーに配列を設定する方法は? コントローラーで値を取得します(エコーを行いました)。

私のコントローラーコードは次のとおりです。

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

私のビューファイル:

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

コントローラーの変数 $userFormCount に値を格納したため、ビュー ファイルで値を取得できません。しかし、配列値を設定および取得する方法は?

4

2 に答える 2

2

まず第一に、関数呼び出しを繰り返さないようにする必要があります。

関数の最初の 2 行は、次のように置き換えることができます。

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

次に、ビューに渡す前にオブジェクトを変更し、計算しているプロパティをそのオブジェクトに追加できます。

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

データベースから取得した他のフィールドと同じように、ビューで使用できます。さらに改善するには、少なくともこのカスタム値が複数回使用される場合は、このコードをモデルのafterFindコールバックに移動することを検討してください。User

于 2009-09-11T12:12:08.197 に答える
1

あなたはすでに配列値を設定する方法を知っています:-)

このコードでは、配列'users'を設定しています

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

したがって、他のアレイについても同じことができます。

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

...そしてusers変数と同じ方法でそれを読んでください。

ただし、現在のコードを改善する方法を説明しているRaYellの回答をご覧ください。

于 2009-09-11T12:19:02.757 に答える