MVC验证应该返回布尔值或数组

时间:2015-12-25 10:26:37

标签: php validation

我有重置用户密码的操作。我已经创建了reset_password_tokenreset_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:对不起,我的英语非常糟糕

0 个答案:

没有答案