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;
}
}
?>
今、私が間違って入力を与えた場合、それは、登録/ページ/ユーザーにリダイレクトされますと、以下のようにコンテンツが表示されます。 が見つかりませんでした エラー以下のエラー修正してください:要求されたアドレスを'/ users/register'はこのサーバー上に見つかりませんでした。 "無効なメール"や "名前フィールドは空であってはいけません"といった特定のエラーは表示されません。また、無効な入力が入力された場合、どのようにログインページにリダイレクトするのですか? – Angeline
これらの特定のエラーメッセージが表示されないように誤って構成されたAuthコンポーネントがあるようです。あなたは実際にあなたのコードの一部をコメントアウトして、どのビットがあなたの問題を引き起こしているのかを調べるべきです。 –
これらのエラーを表示するためにAuthコンポーネントが必要ですか?私はちょうど私のコンポーネントフォルダ(アプリのフォルダ内)を噛んで、私はauth.phpファイルを持っていない。 – Angeline