Может ли кто-нибудь помочь мне с ясным и полным примером того, как установить валидации для 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;
}
}
?>
Теперь, если я даю неправильный ввод, он перенаправляется на страницу/пользователей/регистрации и отображает содержимое следующим образом: Пожалуйста, исправьте ошибки ниже Не найдено Ошибка: Запрошенный адрес '/ users/register' не найден на этом сервере. Я не получаю конкретную ошибку, например: «Недействительный адрес электронной почты» или «Поле имени не должно быть пустым». А также Как перенаправить его на страницу входа в систему, если введены недопустимые входы? – Angeline
Похоже, что у вас есть неправильно сконфигурированный компонент Auth, который предотвращает появление определенных сообщений об ошибках. Вы действительно должны попробовать комментировать части своего кода и проверить, какой бит вызывает у вас проблемы. –
Должен ли я иметь компонент Auth для отображения этих ошибок? Я просто почесал папку моих компонентов (внутри папки приложения), и у меня нет файла auth.php. – Angeline