0

CodeIgniter DataMapper ORM を使用していますが、よくわからないことがあります。

この例、http://datamapper.wanwizard.eu/pages/examples/login.html$validationでは、 User モデル クラスで定義されたいくつかのルールがあることがわかります。

関数内ではlogin、 を呼び出していることもわかります$this->validate()->get()。関数が実行されると、のすべてのルールvalidationに対してチェックする必要があります。$validation

私が理解できないのは、ログインのユースケースでは、ユーザー名とパスワードのみを検証する必要があるということですが、この例では、このユースケースとは関係のない他の検証ルールがあることがわかります。具体的には、 でconfirm_password定義されたルールが$validationあり、このルールは明らかに、ログインのユース ケースではなく、更新のユース ケースのみを対象としています。

この例では、これらの無関係なルールをバイパスするコードが見当たらないので、DataMapper ORM はこれらの無関係なルールがlogin関数内でバイパスされる可能性があることを実際にどのように認識しているのでしょうか?

皆様、どうもありがとうございました。

4

4 に答える 4

2

おそらく解決策は、2 つのモデルを作成することです。1 つは「ログイン」(テーブル ユーザー用) で、もう 1 つは「登録」(テーブル ユーザー用) です。次に、ログインしたいときは、ユーザーのログインモデルを使用するだけです。これこそがモデルの真の目的だと思います。(現在、2 つのモデルで 2 セットの検証があります)

于 2011-06-09T07:22:38.093 に答える
1

オブジェクトのvalidate()関数を呼び出すだけで、検証ルールを適用できます。パラメータなしでsave()呼び出しを実行すると、validateが自動的に実行されることに注意してください。オブジェクトに対して実行またはvalidate()-> get()を実行して、オブジェクトの現在のフィールド値を使用して一致するレコードを取得することもできます。

http://datamapper.wanwizard.eu/pages/validation.html

検証はオブジェクトの現在のフィールドを使用して実行され、「confirm_password」フィールドは「非データベーステーブルフィールド」であるためだと思います。

于 2011-04-21T12:12:58.370 に答える
1

Datamapper の検証メソッドは、オブジェクトの一部ではないフィールドのルールを無視します。そのためconfirm_password、オブジェクトにそのフィールド名によるプロパティがない限り、ルールはトリガーされません。

データ検証ルールは、データへの唯一のエントリ ポイントであり、データベースに入るすべてのデータが検証されることを保証するため、コントローラーではなくモデル内にある必要があります。また、DRY にも対応します。モデルを使用するすべてのコントローラーで検証ルールを定義する必要はありません。

この事実を考えると、CRUD フォームにもある可能性のある追加フィールドのルールを定義して、すべてを 1 か所に保持するのは簡単です。

于 2012-03-26T16:23:00.127 に答える
1

ログインの使用form_validation libraryと検証のみusername/passwordregistration場合、使用できDataMapper、モデルにルールを追加するconfirm_password 必要がありますが、ルールをpassword追加しない でください..それを行う必要がありますrequiredconfirm_password

于 2012-02-11T02:58:12.763 に答える