2009-07-01 2 views
0

Может ли кто-нибудь помочь мне с ясным и полным примером того, как установить валидации для 2 полей, например, по электронной почте и паролю, с сообщениями об ошибках?validate function in cakephp

Из моего понимания, правильный формат:

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 из конструктора, вы можете продолжать делать это, как вы делаете это сейчас, если вы не» t на реализацию 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