2012-04-17 11 views
1

私は車輪に新しいです(そして私はたくさんここに投稿していると確信しています)。CFWheels - 同じモデルを使用して2つの異なるフォームを検証します

"user"のコントローラの下に "register"と "login"という2つの形式があります。だから私のURLのように見える。これはうまく動作します - 私は単にinitメソッド内のページを「登録」の検証とuser.cfcを持っている私のモデルフォルダ内の瞬間

/ユーザー/登録/ /ユーザー/ログイン/

本質的に...私の質問は...私のログインフォームの検証に関するものです。 initメソッドまたは別のメソッドに常に検証を配置する必要がありますか?もしそうなら、私はこれをどのようにするのですか?それぞれのフォームにはさまざまなフィールドがあります...したがって、現在どのフォームが使用されているかを検出するためのロジックを知る必要があります。

希望はこれが理にかなっています。参考までに、私のuser.cfcモデルは、現在、次のようになります。

<cfcomponent extends="Model" output="true"> 

    <cffunction name="init"> 

     <cfset validate(property='userName', method='validateAlphaNumeric') /> 
     <cfset validatesPresenceOf(properties='userName') /> 
     <cfset validatesUniquenessOf(properties='userName') /> 

     <cfset validatesFormatOf(property='userEmail', type='email', message="Email address is not in a valid format.") /> 
     <cfset validatesPresenceOf(properties='userEmail') /> 
     <cfset validatesUniquenessOf(properties='userEmail') /> 

     <cfset validatesPresenceOf(properties='userPassword') /> 
     <cfset validatesConfirmationOf(property='userPassword') /> 

     <cfset validatesLengthOf(property="userToken", allowBlank=true) /> 

    </cffunction> 

    <cffunction name="validateAlphaNumeric" access="private"> 
     <cfif REFind("[^A-Za-z0-9]", this.userName, 1)> 
      <cfset addError(property="userName", message="User name can only contain letters and numbers.") /> 
     </cfif> 
    </cffunction> 

</cfcomponent> 

おかげで、 マイケル。

+0

最初の検証ルールでは、 'property = 'userName''は必要ありません。必要なのは 'method'引数だけです。 –

答えて

1

マイケル、

あなたのinit()メソッドでモデルの検証を配置する必要があります。ホイールにはそれが必要です。しかし、ログインページ/コールにモデル検証を使用する必要があるかどうかはわかりません。

私が何かを見逃していない限り、ユーザがサイトにログインしたときに、モデルを実際に変更しているわけではありません(新規作成または既存のユーザの更新)。 DB値との単純な認証(ユーザー名とパスワードの組み合わせの確認)です。

私の場合、私はログインのためのクライアント側の検証(フィールドが完了したなど)とレジスタのモデル検証を使用します。

HTH! このURLにクレイグ

+0

あなたは正しいと思うCraig ...ログインの検証は必要ないかもしれませんが、 "user"の下で編集ページやその他のフォームを作成したいのであれば、同じモデルを使うでしょう。私は立ち往生した。うまくいけば、あなたは私が何を意味するか知っています。 –

+0

私はそう思います、マイケル。私の車輪アプリでは、制限されたマテリアルにアクセスしようとしたときにユーザーが認証されるように、私のモデルで使用するフィルターがあります。フィルタ( "loginRequired")は、ユーザがログインしているかどうかをチェックし、そうでなければ単純なログインフォームだけである "login"ルート(config/routes.cfmで設定)にリダイレクトします。このフォームでjavascript検証を実行します(ユーザー名/パスワードフィールドが満たされていることを確認してください)。しかし、私の管理ページ(およびユーザープロファイルページ)では、ユーザーは自分のacctを編集できます...そのフォームはモデルの検証を使用して、save()の前にユーザーデータが正しいことを確認します。 –

+1

同じ妥当性検査のルールは、 'update()'シナリオにちゃんと適用されるはずです。オブジェクトをロードすると、有効なデータが格納され、新しく変更されたフィールドが保存されます。あなたが私を信じていないなら、試してみてください。 :) –

関連する問題