我有重置用户密码的操作。我已经创建了reset_password_token
,reset_password_token_created_at
。
验证规则是:令牌存在且reset_password_token_created_at - 今天< = 1.每条规则都有不同的消息
第一个问题:我认为验证是业务逻辑,因此我将规则放在UserModel
<〜right?
第二个问题如果验证应该放在模型中,那么验证应该返回布尔值,数组或数字集(-1,0,1)。我在示例下面使用了php(代码可能不对)
如果返回布尔值,则控制器接收结果并根据该结果返回消息,但如何在规则1或规则2上检测其错误以设置消息(每个规则具有不同的消息)
Ex:UserModel.php
// first solution return boolean
private function reset_password_validator($token) {
$user = User::find_by_token($token);
if (!$user) return false;
$created_date = $user.reset_password_token_created_at;
if (mktime() - strtotime($created_date) > 1) return false;
return true;
}
// call in controller
$result = User::reset_password_validator($token);
如果返回数组,我应该直接返回错误信息还是返回一个数字。 例如:
private function reset_password_validator($token) {
$user = User::find_by_token($token);
//return error message
if (!$user) return array('error' => true, 'message' => 'Not exist');
$created_date = $user.reset_password_token_created_at;
if (mktime() - strtotime($created_date) > 1) {
return array('error' => true, 'message' => 'Too late');
}
return array('error' => false, 'message' => 'success');
//return status_code
if (!$user) return -1;
$created_date = $user.reset_password_token_created_at;
if (mktime() - strtotime($created_date) > 1) {
return 0;
}
return 1;
}
如果返回一组数字(-1,0,1)
private function reset_password_validator($token) {
$user = User::find_by_token($token);
//return status_code
if (!$user) return -1;
$created_date = $user.reset_password_token_created_at;
if (mktime() - strtotime($created_date) > 1) {
return 0;
}
return 1;
}
// call in controller
$result = User::reset_password_validator($token);
if ($result == -1) echo 'Not exist';die;
if ($result == 0) echo 'Too late';die;
echo 'Done';die;
我该怎么办?如果您有更好的解决方案,请告诉我。非常感谢 ps:对不起,我的英语非常糟糕