2009-06-29 33 views
0

我正在嘗試在名稱,電子郵件和密碼字段的登錄頁面中執行驗證。如果輸入未通過驗證,則應顯示錯誤消息。爲什麼CakePHP中不顯示驗證錯誤?

但是在這裏,當我填寫細節並提交時,它被重定向到下一頁。只有值不會保存在數據庫中。

爲什麼消息不顯示?

這是我的模型:

class User extends AppModel { 
    var $name = 'User'; 
     var $validate = array(
      'name' => array(
      'alphaNumeric' => array(
       'rule' => 'alphaNumeric', 
       'required' => true, 
       'message' => 'Alphabets and numbers only' 
      ), 
      'between' => array(
       'rule' => array('between', 5, 15), 
       'message' => 'Between 5 to 15 characters' 
      ) 
     ), 
      'password' => array(
      'rule' => array('minLength', '8'), 
      'message' => 'Mimimum 8 characters long' 
     ), 
     'email_id' => 'email' 
    ); 

    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; 
    } 

    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; 
      } 
     } 
    } 
} 

這是我的控制器:

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

    function login() { 
     $userId = $this->User->loginUser($this->data); 
     if($userId>0) { 
      $this->Session->setFlash('Login Successful.'); 
      $this->redirect('/forms/homepage/'.$userId); 
      break; 
     } else { 
      $this->flash('Login Unsuccessful.','/forms'); 
     } 
} 

    function register() { 
     $userId=$this->User->registerUser($this->data); 
     $this->Session->setFlash('You have been registered.'); 
     $this->redirect('/forms/homepage/'.$userId);       
    }  
} 

EDIT

爲什麼該消息,例如, 「最小8個字符」,是密碼字段中少於8個字符時不顯示?

<!--My view file File: /app/views/forms/index.ctp --> 
<?php 
echo $javascript->link('prototype.js'); 
echo $javascript->link('scriptaculous.js'); 
echo $html->css('main.css'); 
?> 

    <div id="appTitle"> 
    <h2> formBuildr </h2> 
    </div> 

    <div id="register"> 
    <h3>Register</h3> 
    <?php 
echo $form->create('User',array('action'=>'register')); 
echo $form->input('User.name'); 
echo $form->error('User.name','Name not found'); 
echo $form->input('User.email_id'); 
echo $form->error('User.email_id','Email does not match'); 
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> 
+0

你在控制器中做什麼?請張貼該代碼。 – deceze 2009-06-29 08:48:23

+0

在模型中的registerUser函數中,爲什麼要做一個find('all')?你應該使用find('first')。否則,您將獲得用戶表中的所有用戶ID。 – jimiyash 2009-06-30 01:19:03

+0

你可以發佈你的觀點嗎? – 2009-07-01 07:50:50

回答

0

您的驗證似乎是正確的

如何嘗試以下操作:

  1. 確保選中設置你的$形式 - >創建到相應的功能
  2. 確保沒有$此 - > Model-> read(),然後發出Model-> save();

編輯

你有以下?:

function register() 
{ 
    //do not put any $this->User->read or find() here or before saving pls. 
    if ($this->User->save($this->data)) 
    { 
     //... 
    } 
} 

EDIT2

如果你正在做一個read()或find()方法保存之前然後模型將重置字段。您應該將該變量作爲type = hidden傳遞給表單。我希望我有道理。

EDIT3

我想你需要將你的registerUser()到您的控制器,因爲其在模型中的功能不會向您提供虛假的回報。即使它有驗證錯誤,它總是會是真的。

+0

是的,我有.. – Angeline 2009-06-29 09:18:54

+0

不,實際上我保存在表中的條目,然後只獲取保存條目的Id。在保存之前,我沒有閱讀()或find()。 – Angeline 2009-06-29 09:32:40

+0

是的,我注意到了。嘗試移出控制器中的保存程序? – drikoda 2009-06-29 09:35:05

0

註釋掉重定向行並在config/core.php中將debug設置爲2。然後看看正在生成的SQL,看看你的插入是否工作。如果錯誤沒有顯示,可能在視圖中,您使用$ form-> text或$ form-> select而不是$ form->輸入函數。只有$ form->輸入函數會自動顯示錯誤信息。

+0

如果一切都失敗有時,最好是剛開始在重新也許看別人在做什麼。註冊非常普遍,我相信你可以在網上找到一個cakephp註冊教程。 – jimiyash 2009-06-30 01:21:35

+0

好吧,我試過的代碼是什麼,出現了一些錯誤.. 有人能告訴我一個很好的教程嗎? – Angeline 2009-07-01 04:40:42