2011-12-30 76 views
0

在我的應用程序中,用戶可能有也可能沒有配置文件。一個例子是:如果用戶沒有個人資料顯示404

Array 
(
    [User] => Array 
     (
      [id] => 7 
      [username] => noprofile 
      [password] => 3b8cdb0c849f00f3634d9b29def1dac4e9235795 
      [email] => [email protected] 
      [status] => 0 
      [code] => 114a10ebb6ffe364805aa70cd44bee7c 
     ) 

    [Profile] => Array 
     (
      [id] => 
      [firstname] => 
      [lastname] => 
      [gender] => 
      [dob] => 
      [user_id] => 
     ) 

) 

在這裏,用戶noprofile在配置文件表中沒有匹配的內容。

如何在發生這種情況時顯示404?我試過了:

public function view ($username) 
{ 
    $this->Profile->User->recursive = 2; 

    $profile = $this->Profile->User->find('first', array( 
       'conditions' => array('User.username' => $username) 
      )); 

    if (empty($profile)) 
    { 
     echo 'echo1'; 
     throw new NotFoundException('No profile'); 
    } 
    else { 
     echo 'echo2'; 
    } 

    $this->set(compact('profile')); 
} 

但它沒有顯示404!我正在使用CakePHP 2.0。

這是因爲它找到了用戶,因此配置文件不是空的!如何檢查配置文件爲空?

+0

檢查$ profile的值,並檢查是否確實正在輸入if語句並執行cakeError。 – Jrod 2011-12-30 16:02:35

+0

如何檢查,因爲我沒有IDE來檢查是否到達 – Cameron 2011-12-30 16:10:54

+0

您不需要IDE。在if語句之前打印/回顯$ profile變量,然後在if語句中打印/回顯一個字符串,如「嘿,我在IF語句中」。 – Jrod 2011-12-30 16:17:47

回答

1
if (empty($profile['Profile']['id'])) { 
    throw new NotFoundException(); 
} 

我希望有更好的方法來做到這一點,但是這是一個快速解決。如您所說,$profile將不會爲空,因爲找到了user

2

cakephp 2.0已經改變了顯示錯誤的方式。現在你必須throw an exception。在你的情況,而不是:

$this->cakeError('error404'); 

你要做的:

throw new NotFoundException(); 

編輯: 在另一方面,你migth想要做你的查找查詢使用JOIN(和遞歸-1),以便查詢只有在他有配置文件時才能檢索用戶的信息。

希望這有助於

+0

我仍然可以訪問該頁面(即使在生產模式下) – Cameron 2011-12-30 15:55:47

+0

您是否嘗試過在查找查詢中使用連接?嘗試調試您的代碼。 'pr($ profile)''empty($ profile)'總是返回false,因爲配置文件可能類似於'array(「name =>'','lastname'=>'',...) ' – pleasedontbelong 2011-12-30 16:44:10

相關問題