Kohana の ORM には、Kohana の Validation が組み込まれています。
私が理解している限り、データベースに追加されるフィールドを検証します。$_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
variable のこれら 3 つの要素が
空でないことを確認したい! ORM::save()
私が言ったように、それは呼び出される前に要素をチェックします。そして、ypuが私のコードをよく見ると...カスタムメソッドhashed_password
で何かに設定しました。ハッシュ化されます。問題は、ユーザーがパスワードを送信していない場合(HTMLフォームではそのフィールドを「パスワード」と呼びますが、データベースでは「hashed_password」と呼びます)...パスワードが送信されない場合-空の文字列をハッシュし、ハッシュにつながりますとりあえず。セットhashed_password
です!
次に、検証がオンにORM::save()
なり、結論として、パスワードが空になることはありません! これに対処する方法は?コントローラーでの追加の検証? どのように対処しますか?多分少し異なるロジック?
PS私のコードに対する他の提案は大歓迎です。アドバイスありがとう!