2012-06-12 2 views
0

Я думал, что это будет относительно обычная вещь, но я не могу найти примеры нигде, и раздел поваренной книги на find() не был ясен в малейшей степени по этому вопросу. Может быть, это просто так просто, что Cake предполагает, что вы можете просто сделать это самостоятельно.CakePHP User Lookup, основанный на их ID

Все, что я хочу сделать, это получение имени пользователя (а не текущего пользователя) другого в Cake на основе их идентификатора, переданного мне массивом в представлении.

Вот что у меня есть в контроллере:

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

На данный момент, я даже не знаю, если я нахожусь на правильном пути ... Я полагаю, это будет возвращать массив с пользователя данных, но как мне обрабатывать эти результаты? Как узнать, как будет выглядеть массив? Я только return($cakeArray['first'].' '.$cakeArray['last'])? I dunno ...

Помощь?

ответ

2

Чтобы получить возвращенные данные, вы должны использовать set и сделать его доступным как переменную в ваших представлениях. set - это основной способ передачи данных с вашего контроллера на ваш просмотр.

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

больше в manual (это фундаментальный торт материал так может быть стоит иметь хорошее чтение)

+1

Upvoted, потому что это правильный ответ, но вы можете не запрашивать базу данных дважды для такой простой операция. Более чистый способ - сделать '$ user = $ this-> User-> find (...)', а затем перенаправить, если 'empty ($ user)', в противном случае установлен для представления. Кроме того, ваша ссылка указывает на версию версии 1.3, в то время как вопрос отмечен 2.0. –