返回用户信息的最佳做法
每次困扰我;如何将信息(登录成功,文章更新)返回给用户,特别是在OOP ..(PHP)
任何提示将不胜感激!
- 更新/不要求如此多的答案!哇!!
例如用户注册;我使用了自定义异常类。
/*
* 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);
}
答案 0 :(得分:2)
使用多个catch和try块抛出新异常(在catch之后它将停止执行catch块)
异常可能代价高昂,异常通常表示app本身存在问题,如cURL错误,而不仅仅是用户犯错误或没有正确登录。我会对您的应用中的实际问题保留例外情况,并仅向您报告。
只是一堆返回值(看起来很糟糕)
取决于您如何执行这些返回值。看看PHP框架是如何做到的:
特别是(这样做的一种很好的方式)是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(例如)每个验证函数返回布尔值,然后将其附加到错误消息持有者。
正如许多人所说,这条道路归结为你的特殊情况。