cómo almacenar una matriz en el controlador y usarla en el archivo de vista en cakephp

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

  •  05-07-2019
  •  | 
  •  

Pregunta

En mi controlador de Usuarios, encuentro la cantidad de formularios que el usuario ha creado al consultar la tabla de 'Formularios' y la almaceno en una matriz. Pero cómo usar las variables de matriz en el archivo de vista.

Normalmente, establecería la variable en el controlador utilizando la función set y la utilizaría en el archivo de vista como tal. Pero, ¿cómo establecer una matriz en el controlador? Obtengo los valores en el controlador (hice un eco).

El código de mi controlador es:

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

Mi archivo de vista:

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

Como he almacenado el valor en un $ userFormCount variable en el controlador, no obtengo el valor en el archivo de vista. pero ¿cómo establecer y obtener un valor de matriz?

¿Fue útil?

Solución

En primer lugar, debes evitar repetir tus llamadas de función.

Las dos primeras líneas de su función se pueden reemplazar por:

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

A continuación, puede modificar su objeto antes de pasarlo a la vista y agregar la propiedad que está calculando a ese 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);
}

y luego puede usarlo en su vista como cualquier otro campo que obtenga de la base de datos. Para mejorar aún más, es posible que desee considerar la posibilidad de transferir este código a una devolución de llamada afterFind en su modelo de User , al menos si estos valores personalizados se usan más de una vez.

Otros consejos

Ya sabes cómo establecer un valor de matriz :-)

En este código está configurando la matriz 'usuarios'

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

Para que puedas hacer lo mismo con la otra matriz:

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

... y léelo de la misma manera que la variable de sus usuarios.

Pero mire la respuesta de RaYell, porque explica cómo mejorar su código actual.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top