como armazenar uma matriz no controlador e usar no arquivo view no CakePHP
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?
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.