Pergunta

No meu controlador Usuários, acho que o número de formulários que o usuário tenha criado consultando a tabela 'Formulários' e armazená-lo em uma matriz. Mas como usar as variáveis ??de matriz no arquivo vista.

Normalmente, eu definir a variável no controlador usando a função de conjunto e usá-lo no arquivo vista como tal. Mas como definir uma matriz no controlador? Eu obter os valores no controlador (fez um eco).

Meu código do controlador é:

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

O meu arquivo de visão:

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

Desde que eu tenha armazenado o valor em uma $ userFormCount varaible no controlador, eu não obter o valor no arquivo de vista. mas como definir e obter um valor de matriz?

Foi útil?

Solução

Em primeiro lugar você deve evitar repetir suas chamadas de função.

As primeiras duas linhas da sua função pode ser substituída por:

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

Em seguida, você pode alterar seu objeto antes de passá-lo para visualizar e adicionar a propriedade você está calculando a esse objeto.

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 então você pode usá-lo na sua opinião como qualquer outro campo que você começa a partir do banco de dados. Para melhorar ainda firther você pode querer considerar mover este código para uma chamada de retorno afterFind no seu modelo User, pelo menos se estes valores personalizados são utilizados mais de uma vez.

Outras dicas

Você já sabe como definir um valor de matriz: -)

Neste código você está definindo a matriz dos usuários '

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

Assim, você pode fazer o mesmo para o outro array:

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

... e lê-lo da mesma forma como a variável de usuários.

Mas, por favor olhar para a resposta de RaYell, porque explica como fazer o seu código atual melhor.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top