2011-12-30 11 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

+0

どうすれば確認できますか?確認するIDEがない場合は、 – Cameron

+0

IDEが必要です。 if文の前に$ profile変数を印字/エコーし、if文の中に "Hey I am in the IF statement"のような文字列を印字/エコーします。 – Jrod

答えて

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 -1)、プロファイルを持っている場合にのみ、ユーザーの情報を取得するようにクエリを強制します。

希望これは、私はそれを行うには良い方法がある期待

+0

まだ、プロダクションモードでもページにアクセスできます – Cameron

+0

検索クエリで結合を使用しようとしましたか?あなたのコードをデバッグしてみてください。それ以外に 'profile(' name => '、' lastname '=>' '、...)のようなものなので、 'empty($ profile)'は常にfalseを返します。 ' – pleasedontbelong

関連する問題