【问题标题】:How to validate given data in ORM?如何验证 ORM 中的给定数据?
【发布时间】: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


    【解决方案1】:

    我看不出您当前的方法有什么“错误”。

    您可以添加一个条件 (Model_user::signup()) 来检查请求的密码是否为空,然后再对其进行哈希处理(ofc,如果是,则根本不设置它),因此它将保持为空并导致验证失败。

    我在这里可以注意到的另一件事是注册方法本身是模棱两可的,它可以使用普通的 create() 结合密码过滤器轻松完成(以便在更改时设置 hashed_pa​​ssword 和 salt)。

    恕我直言,根据当前对象的状态使用条件规则/过滤器也是一个好习惯。

    【讨论】:

      猜你喜欢
      • 2012-02-17
      • 2018-11-20
      • 2011-03-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-08
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多