0

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();

}

$datavariable のこれら 3 つの要素が 空でないことを確認したい! ORM::save()私が言ったように、それは呼び出される前に要素をチェックします。そして、ypuが私のコードをよく見ると...カスタムメソッドhashed_passwordで何かに設定しました。ハッシュ化されます。問題は、ユーザーがパスワードを送信していない場合(HTMLフォームではそのフィールドを「パスワード」と呼びますが、データベースでは「hashed_pa​​ssword」と呼びます)...パスワードが送信されない場合-空の文字列をハッシュし、ハッシュにつながりますとりあえず。セットhashed_passwordです!

次に、検証がオンにORM::save()なり、結論として、パスワードが空になることはありません! これに対処する方法は?コントローラーでの追加の検証? どのように対処しますか?多分少し異なるロジック?

PS私のコードに対する他の提案は大歓迎です。アドバイスありがとう!

4

1 に答える 1

0

現在の方法の何が「間違っている」のかわかりません。

条件 ( ) を追加してModel_user::signup()、要求されたパスワードをハッシュする前に空かどうかを確認することができます (ofc、空の場合はまったく設定しない)。これにより、空のままになり、検証が失敗します。

ここでもう 1 つ気付きましたが、サインアップ メソッド自体があいまいです。通常の create() をパスワードのフィルターと組み合わせて使用​​すると簡単に実行できます (変更時に hashed_pa​​ssword と salt が設定されるようにします)。

現在のオブジェクトの状態に応じて、条件付きルール/フィルターを使用することもお勧めです。

于 2011-07-11T08:30:50.487 に答える