【发布时间】:2011-07-10 20:20:05
【问题描述】:
Kohana 的 ORM 带有内置的 Kohana 验证。
据我所知,它会验证将被添加到的字段
数据库。它对我不起作用,因为我需要验证字段
来自$_POST(简单来说)。
让我举个例子。
在控制器中:
$data = Arr::extract($this->request->post(), array('username', 'password', 'password_repeatedly', 'email'));
try {
ORM::factory('User')->sign_up($data);
$this->request->redirect('sign-in');
} catch(ORM_Validation_Exception $exception) {
$errors = $exception->errors('error_messages');
echo 'There were errors:<br />';
echo Debug::dump($errors);
exit;
}
变量$data 是我需要验证的数组。方法sign_up() 是
只是我的 ORM 模型中将创建用户的自定义方法。为......感到抱歉
控制器中的“echo'es”和“exit's”——我只是在调试...
我的 ORM 模型如下所示:
public function rules() {
return array(
'username' => array(
array('not_empty')
),
'hashed_password' => array(
array('not_empty')
),
'email' => array(
array('not_empty')
)
);
}
public function sign_up($post) {
$salt = $this->_hurricane->generate_salt();
$hashed_password =
$this->_hurricane->hash_password($post['password'], $salt);
$this->username = $post['username'];
$this->hashed_password = $hashed_password;
$this->salt = $salt;
$this->email = $post['email'];
$this->save();
}
我想检查变量$data 的这三个元素是
不为空!正如我所说,它在ORM::save() 之前检查元素是
叫。如果 ypu 仔细查看我的代码......在我的自定义方法中,我
已将 hashed_password 设置为某物。它会使它散列。
问题是如果用户没有提交任何密码(我称之为
我的 HTML 表单中的字段“密码”,但在
数据库)...如果没有提交密码 - 它将散列空字符串
无论如何,这将导致哈希。所以hashed_password 设置好了!
然后验证由ORM::save() 开启,最后——
密码永远不可能为空!如何处理?额外的
在控制器中验证?你会怎么处理?或许一点点
有点不同的逻辑?
附:对我的代码的任何其他建议将不胜感激。感谢您的建议!
【问题讨论】:
标签: php validation kohana-3 kohana-orm