как сохранить массив в контроллере и использовать в файле представления в cakephp

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

  •  05-07-2019
  •  | 
  •  

Вопрос

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

Это было полезно?

Решение

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

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

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

Другие советы

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

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

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

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top