返回用户信息的最佳实践

时间:2012-08-17 21:44:26

标签: php

返回用户信息的最佳做法

每次困扰我;如何将信息(登录成功,文章更新)返回给用户,特别是在OOP ..(PHP)

  • 使用多个catch和try块抛出新异常(在catch之后它将停止执行catch块)
  • 只是一堆返回值(看起来很糟糕)
  • true和false(然后在运行类的脚本中检查true和false?)
  • 用于处理错误消息的分隔类(扩展异常?)

任何提示将不胜感激!

- 更新/不要求如此多的答案!哇!!

例如用户注册;我使用了自定义异常类。

/*
 * custom exception class
 */
class Message extends Exception
{
    public function __construct($message, $code = true) 
    {       
        parent::__construct($message, $code);
    }

    public function information() 
    {
        return '<div class="check"><img src="/admin/static/images/'.($this->code == true ? 'good' : 'bad').'.gif" alt="check" class="icon" width="20px" height="20px" />' . $this->message . '</div>';
    }
}

并且在班级本身;

    if(is_numeric($id) === false)
    {
        Throw new Message('message', false);
    }

1 个答案:

答案 0 :(得分:2)

  

使用多个catch和try块抛出新异常(在catch之后它将停止执行catch块)

异常可能代价高昂,异常通常表示app本身存在问题,如cURL错误,而不仅仅是用户犯错误或没有正确登录。我会对您的应用中的实际问题保留例外情况,并仅向您报告。

  

只是一堆返回值(看起来很糟糕)

取决于您如何执行这些返回值。看看PHP框架是如何做到的:

  • 的Yii
  • CakePHP的
  • 的Zend

特别是(这样做的一种很好的方式)是Yii自己的用户登录处理程序:http://www.yiiframework.com/doc/api/1.1/CUserIdentity

您会注意到他们有基于类的错误代码和消息。

你会发现很多这些框架都使用基于模型/控制器的表单模式,这意味着你定义了一组验证规则(即使是登录用户,就像在Yii中很多次auth是基于类的)和这些验证规则运行填写附加到这些规则的错误消息。最终你有一个像:

这样的数组
array{
    'username' => 'Username was empty',
    'password' => array(
        // More errors
    )
}

表示您的所有返回值。它很好而且整洁,因为它是每个字段的错误,并且它们也很容易在循环中进行和操作。

对于实际多次登录用户,您将按以下方式运行:

if($user->authenticate()){
    // redirect to member page
}else{
    return $user->getErrors();
}

这种情况的回归通常与上面的表格相似。

  

true和false(然后在运行类的脚本中检查true和false?)

当涉及到多个错误时,真假都非常模糊,例如: - 用户登录但他们的帐户可以被删除或禁止。你怎么能用布尔来区分呢?

其他人/框架如Lithium(例如)每个验证函数返回布尔值,然后将其附加到错误消息持有者。

正如许多人所说,这条道路归结为你的特殊情况。