2009-07-01 9 views
0

2つのフィールド(電子メールとパスワードなど)に検証メッセージを設定してエラーメッセージを表示する方法についての明確な例を教えてもらえますか?cakephpのvalidate関数

私の理解から、正しい形式は次のとおりです。

var $validate = array(
    'password' => array(
     'rule' => array('minLength', '8'), 
     'message' => 'Minimum 8 characters long' 
    ), 
    'email_id' => array('email') 
    ); 

が、私は私のテストで(検証メッセージを表示、またはアクションの実行を停止)、それは仕事を得るように見えることはできません。

検証は正常に機能しますが、カスタムメッセージは表示されません。

EDIT

検証およびページリダイレクトが今も元気に動作します。特定のメッセージだけが表示されません。つまり、8文字未満のパスワードを入力すると、登録ボタンをクリックした直後または「登録ボタン」をクリックすると、「最低8文字必要です」というメッセージが表示されます。これを行う方法はありますか?

EDIT 2

マイビューファイル

<!-- File: /app/views/forms/index.ctp --> 

    <?php 
    echo $javascript->link('prototype.js'); 
    echo $javascript->link('scriptaculous.js'); 
    echo $html->css('main.css'); 
?> 

    <div id="register"> 
    <h3>Register</h3> 
    <?php 
    echo $form->create('User',array('action'=>'register')); 
    echo $form->input('User.name'); 
    echo $form->input('User.email_id'); 
    echo $form->input('User.password'); 
    echo $form->end('Register'); 
    ?> 
    </div> 

    <div id="login"> 
    <h3>Login</h3> 
    <?php 
    echo $form->create('User',array('action'=>'login')); 
    echo $form->input('User.email_id'); 
    echo $form->input('User.password'); 
    echo $form->end('Login'); 
    ?> 
    </div>   

コントローラー:

<?php 
    class UsersController extends AppController 
    { 

var $name = 'Users'; 
var $uses=array('Form','User','Attribute','Result'); 
var $helpers=array('Html','Ajax','Javascript','Form'); 

function register() 
{ 

    $userId=$this->User->registerUser($this->data); 
    $this->User->data=$this->data; 
     if (!$this->User->validates()) 
     { 
      $this->Flash('Please enter valid inputs','/forms'); 
      return; 
     } 

     $this->Flash('User account created','/forms/homepage/'.$userId);    

} 

function login() 
    { 

    $userId=$this->User->loginUser($this->data); 
    $this->User->data=$this->data; 

    if (!$this->User->validates()) 
     { 
      $this->Flash('Please enter valid inputs','/forms'); 
      return; 
     } 
    if($userId>0){ 
     $this->Flash('Login Successful'); 
     $this->redirect('/forms/homepage/'.$userId); 
     break; 

    } 
    else{ 
     $this->flash('Username and password do not match.','/forms'); 

    } 

} 

} 
?> 

モデル:

<?php 

    class User extends AppModel { 
     var $name = 'User'; 
    var $components=array('Auth'); 
    var $validate = array(
      'name' => array(
          'rule' => VALID_NOT_EMPTY, 
          'message' =>'Name cannot be null.' 
         ), 
      'password' => array(
         'rule' => array('minLength', '6'), 
         'message' => 'Minimum 6 characters long.' 
         ), 
      'email_id' => array(
         'rule'=> array('email'), 
         'message'=>'Invalid email.' 
         ) 
      ); 

function registerUser($data) 
{ 
    if (!empty($data)) 
    { 
     $this->data['User']['name']=$data['User']['name']; 
     $this->data['User']['email_id']=$data['User']['email_id']; 
     $this->data['User']['password']=$data['User']['password']; 
     if($this->save($this->data)) 
     { 
      $this->data['User']['id']= $this->find('all',array('fields' => array('User.id'), 
           'order' => 'User.id DESC'  
           )); 
      $userId=$this->data['User']['id'][0]['User']['id']; 
      return $userId; 
     } 
    } 
} 

function loginUser($data) 
{ 
    $this->data['User']['email_id']=$data['User']['email_id']; 
    $this->data['User']['password']=$data['User']['password'];   

    $login=$this->find('all'); 
    foreach($login as $form): 
     if($this->data['User']['email_id']==$form['User']['email_id'] && $this->data['User']['password']==$form['User']['password']) 
     { 
      $this->data['User']['id']= $this->find('all',array('fields' => array('User.id'), 
           'conditions'=>array('User.email_id'=> $this->data['User']['email_id'],'User.password'=>$this->data['User']['password'])  
           )); 
      $userId=$this->data['User']['id'][0]['User']['id']; 

      return $userId; 

     } 
    endforeach; 
} 
    } 
?> 

答えて

4

ここでは、私のプロジェクトからのライブの例..です

これは、あなたのモデルにバリデーションを設定する方法です:Article model

私は、コンストラクタからのvalidate配列を初期化していたという事実を無視するあなたはドン場合、あなたは今それをやっているようにそれをやり続けることができます」 I18nとL10nを実装する計画。コントローラで

取り扱い検証エラー:あなたが検証を参照して、エラーを保存することができますArticles controller

ライン266から280にはsetFlash()+リターンで扱われています。

これはかなり必要なことですが、メッセージが期待どおりに機能するためにはuse the FormHelper for your formsが必要であることを忘れないでください。

一般的なエラー:あなたはでなければなりません。検証に失敗した後に$ this-> redirect()を実行してください。

うまくいけば、これは正しい軌道に乗ってあなたを設定します:)

+0

今、私が間違って入力を与えた場合、それは、登録/ページ/ユーザーにリダイレクトされますと、以下のようにコンテンツが表示されます。 が見つかりませんでした エラー以下のエラー修正してください:要求されたアドレスを'/ users/register'はこのサーバー上に見つかりませんでした。 "無効なメール"や "名前フィールドは空であってはいけません"といった特定のエラーは表示されません。また、無効な入力が入力された場合、どのようにログインページにリダイレクトするのですか? – Angeline

+0

これらの特定のエラーメッセージが表示されないように誤って構成されたAuthコンポーネントがあるようです。あなたは実際にあなたのコードの一部をコメントアウトして、どのビットがあなたの問題を引き起こしているのかを調べるべきです。 –

+0

これらのエラーを表示するためにAuthコンポーネントが必要ですか?私はちょうど私のコンポーネントフォルダ(アプリのフォルダ内)を噛んで、私はauth.phpファイルを持っていない。 – Angeline

関連する問題