如果用户没有个人资料显示404

时间:2011-12-30 15:48:57

标签: php cakephp

在我的应用中,用户可能有也可能没有个人资料。一个例子是:

Array
(
    [User] => Array
        (
            [id] => 7
            [username] => noprofile
            [password] => 3b8cdb0c849f00f3634d9b29def1dac4e9235795
            [email] => noprofile@noprofile.com
            [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。

这是因为它找到了用户,因此配置文件不是空的!如何检查配置文件是否为空?

2 个答案:

答案 0 :(得分:2)

cakephp 2.0改变了显示错误的方式。现在你必须throw an exception。在你的情况下,而不是:

$this->cakeError('error404');

你必须这样做:

throw new NotFoundException();

<强>编辑: 另一方面,您想要在查找查询中执行JOIN(并且递归-1),以使查询仅在具有配置文件的情况下检索用户的信息。

希望这有帮助

答案 1 :(得分:1)

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

我希望有更好的方法可以做到,但这是一个快速解决方案。正如您所说,$profile在查找user时不会为空。