2012-11-27 51 views
0

我的用戶模型:電子郵件驗證錯誤消息 - 的CakePHP

class User extends AppModel { 
    public $validate = array(
     'username' => 'alphaNumeric', 
     'password' => 'notempty', 
     'confirmpassword' => 'notempty', 
     'group_id' => 'notempty', 
     'email' => array( 
       'rule' => 'email', 
       'message' => 'Please provide a valid email address.' 
     ), 
    ); 
} 

我的用戶註冊視圖:

<div class="users form"> 
     <?php echo $this->Form->create('User'); ?> 
    <fieldset> 
     <legend><?php echo __('Register User'); ?></legend> 
       <?php 
         echo $this->Form->input('User.username'); 
         echo $this->Form->input('User.password'); 
         echo $this->Form->input('User.confirmpassword', array('type'=>'password', 'label'=>'Confirm password')); 
         echo $this->Form->input('User.group_id'); 
         echo $this->Form->input('User.email'); 
       ?> 
     </fieldset> 
     <?php echo $this->Form->end(__('Submit')); ?> 
</div> 

在控制器我的用戶註冊操作:

public function register() { 
      if ($this->request->is('post')) { 
        ... 
        //create mail for verification 
        $email = new CakeEmail(); 
        ... 
        $email->to($this->data['User']['email']); 
        $email->send($ms); 
      } 
} 

進入/用戶/ register,當我在電子郵件字段中輸入'asdfgh'之類的東西時,我得到默認的CakePHP錯誤消息:

Invalid email: asdfgh 
Error: An Internal Error Has Occurred. 

代替上述電子郵件字段中的錯誤信息,告訴我:

Please provide a valid email address. 

我的問題:如果它真的叫控制器的動作,當用戶輸入的數據是無效的?只有當用戶的輸入數據有效時,纔有辦法在控制器中調用該動作?

+0

我覺得有什麼不對您的控制器。您可以在/tmp/logs/error.log中找到有關此錯誤的更多信息 – noslone

+0

您說得對,問題是控制器中的一個操作,它嘗試發送電子郵件,但在電子郵件無效時失敗。如何在調用控制器中的操作之前驗證用戶的電子郵件? – cawecoy

+1

嘗試 'if(!Validation :: email($ email)){ //無效的電子郵件! }' – noslone

回答

0

我找到了我的答案! ^^

實際上,驗證只在「save()」方法之前完成,而不是在控制器中的操作調用之前完成。但我可以驗證用戶輸入的控制器,使用:

if ($this->User->validates()) 

重整我的用戶Resgistration動作控制器:

public function register() { 
      if ($this->request->is('post')) { 
        $this->User->set($this->data); 

        if ($this->User->validates()) { 
          ... 
          //create mail for verification 
          $email = new CakeEmail(); 
          ... 
          $email->to($this->data['User']['email']); 
          $email->send($ms); 
        } 
      } 
}