как сохранить массив в контроллере и использовать в файле представления в cakephp - PullRequest
0 голосов
/ 11 сентября 2009

В моем контроллере Users я нахожу количество форм, созданных пользователем, путем запроса таблицы 'Forms' и сохраняю ее в массиве. Но как использовать переменные массива в файле представления.

Обычно я устанавливаю переменную в контроллере с помощью функции 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 в контроллере, я не получаю значение в файле представления. а как установить и получить значение массива?

Ответы [ 2 ]

2 голосов
/ 11 сентября 2009

Прежде всего вам следует избегать повторения вызовов функций.

Первые две строки вашей функции можно заменить на:

$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, по крайней мере, если эти пользовательские значения используются более одного раза.

1 голос
/ 11 сентября 2009

Вы уже знаете, как установить значение массива: -)

В этом коде вы устанавливаете массив 'users'

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

Таким образом, вы можете сделать то же самое для другого массива:

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

... и прочитайте его так же, как переменную вашего пользователя.

Но, пожалуйста, посмотрите на ответ RaYell, потому что он объясняет, как улучшить ваш текущий код.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...