Búsqueda de usuarios de CakePHP basada en su ID

Pensé que esto sería algo relativamente común, pero no puedo encontrar ejemplos en ninguna parte, y la sección del libro de cocina sobre find() no estaba claro en lo más mínimo sobre el tema. Tal vez sea algo tan simple que Cake asume que puedes hacerlo por tu cuenta.

Todo lo que busco hacer aquí es recuperar el nombre de un usuario (no el usuario conectado actualmente... uno diferente) en Cake en función de su ID que me pasó una matriz en la vista.

Esto es lo que tengo en el controlador:

public function user_lookup($userID){
  $this->User->flatten = false;
  $this->User->recursive = 1;
  $user = $this->User->find('first', array('conditions' => $userID));
  //what now?
}

En este punto, ni siquiera sé si estoy en el camino correcto... Asumo que esto devolverá una matriz con los datos del Usuario, pero ¿cómo manejo esos resultados? ¿Cómo sé cómo se verá la matriz? ¿Acabo de return($cakeArray['first'].' '.$cakeArray['last'])? No se…

Ayuda?

preguntado el 12 de junio de 12 a las 10:06

1 Respuestas

Tienes que usar set para tomar los datos devueltos y hacerlos accesibles como una variable en sus vistas. set es la forma principal de enviar datos desde su controlador a su vista.

public function user_lookup($userID){
  $this->User->flatten = false;
  $this->User->recursive = 1;

  // added - minor improvement
  if(!$this->User->exists($userID)) {
      $this->redirect(array('action'=>'some_place')); 
      // the requested user doesn't exist; redirect or throw a 404 etc.
  }

  // we use $this->set() to store the data returned. 
  // It will be accessible in your view in a variable called `user` 
  // (or what ever you pass as the first parameter)
  $this->set('user', $this->User->find('first', array('conditions' => $userID)));

}


// user_lookup.ctp - output the `user`
<?php echo $user['User']['username']; // eg ?>
<?php debug($user); // see what's acutally been returned ?>

más en el manual (Esto es algo fundamental de la torta, por lo que podría valer la pena leerlo bien)

Respondido el 12 de junio de 12 a las 10:06

Votó a favor porque es la respuesta correcta, pero es posible que desee no consultar la base de datos dos veces para una operación tan simple. Una forma más limpia es hacer un $user = $this->User->find(...) y luego redirigir si empty($user), de lo contrario establecer para ver. Además, su enlace apunta a la versión 1.3 del manual, mientras que la pregunta está etiquetada con 2.0. - Dr. Hannibal Lecter

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.