Php 如果用户没有配置文件,则显示404

Php 如果用户没有配置文件,则显示404,php,cakephp,Php,Cakephp,在我的应用程序中,用户可能有个人资料,也可能没有个人资料。例如: Array ( [User] => Array ( [id] => 7 [username] => noprofile [password] => 3b8cdb0c849f00f3634d9b29def1dac4e9235795 [email] => noprofile@noprof

在我的应用程序中,用户可能有个人资料,也可能没有个人资料。例如:

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在profiles表中没有匹配的内容

发生这种情况时,如何显示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!我正在使用CakePHP2.0


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

cakephp 2.0已经改变了显示错误的方式。现在你必须这么做。在您的情况下,而不是:

$this->cakeError('error404');
你必须做到:

throw new NotFoundException();
编辑: 另一方面,您可能希望在find查询中执行JOIN(和recursive-1),以便只在用户有配置文件时,集中查询以检索用户的信息


希望这有帮助

cakephp 2.0改变了显示错误的方式。现在你必须这么做。在您的情况下,而不是:

$this->cakeError('error404');
if (empty($profile['Profile']['id'])) {
    throw new NotFoundException();
}
你必须做到:

throw new NotFoundException();
编辑: 另一方面,您可能希望在find查询中执行JOIN(和recursive-1),以便只在用户有配置文件时,集中查询以检索用户的信息

希望这有帮助

if (empty($profile['Profile']['id'])) {
    throw new NotFoundException();
}
我希望有更好的方法,但这是一个快速修复
$profile
,正如您所说,在找到
用户时,不会为空


我希望有更好的方法,但这是一个快速修复
$profile
,正如您所说,在找到
用户时不会为空。

我仍然可以访问该页面(即使在生产模式下),您是否尝试在查找查询中使用联接?。。试着调试你的代码
pr($profile)
此外,
empty($profile)
将始终返回false,因为配置文件可能类似于
array(“name=>”、'lastname'=>”…)
我仍然可以访问页面(即使在生产模式下),您是否尝试在查找查询中使用联接?。请尝试调试您的代码。
pr($profile)
此外,
empty($profile)
将始终返回false,因为配置文件可能类似于
array(“name=>”,'lastname=>”,)
检查$profile的值,同时检查您是否确实输入了if语句并执行了cakeError。由于我没有IDE来检查您是否不需要IDE,因此如何进行检查。在if语句之前打印/回显$profile变量,然后在if语句中打印/回显类似“Hey I am in the if statement”的字符串。Okies似乎CakePHP没有将概要文件视为空,因为它正在查找用户。请参阅OP,即使不存在配置文件,我也会得到第二个回音。如何修复此问题?请检查$profile的值,并检查您是否确实输入了if语句并执行了cakeError。我如何检查,因为我没有IDE来检查您是否不需要IDE。在if语句之前打印/回显$profile变量,然后在if语句中打印/回显类似“Hey I am in the if statement”的字符串。Okies似乎CakePHP没有将概要文件视为空,因为它正在查找用户。请参阅OP,即使不存在配置文件,我也会得到第二个回音。我该如何解决这个问题?