1

ログインフォームがあります。notempty()ルールでフィールドを検証したい。すべてのエラーメッセージを一度に表示したい(フィールドaは空です)。私の場合、これは起こりません。

私のコードは:

if(empty($this->data['Employee']['username'])){
    $this->Employee->invalidate('username','Please Enter User Name');
}
else if(empty($this->data['Employee']['password'])){
    $this->Employee->invalidate('password','Please Enter Password');
}
else if(empty($this->data['Employee']['project_id'])){
    $this->Employee->invalidate('project_id','Please Select Any Project.');
    $this->redirect(array('controller'=>'employees','action' => 'login'));
}

Login.ctpファイル:

<?php echo $this->Form->create('Employee', array('action' => 'login'));?> 
<h2>Login</h2> <div id="login-area"> 
<?php echo $this->Form->input('username',array('div'=>false,'id'=>'loginusername'));?> 
<?php echo $this->Form->input('password',array('div'=>false,'type'=>'password','id'=>'passw‌​ord'));?> 
<?php echo $this->Form->input('project_id',array('id'=>'projects','empty'=>'Select'));?> 
<?php echo $this->Form->end(__('submit',true));?>

コントローラ機能:

function login(){
        $this->layout = 'login'; //pr($this->data);exit;

        if(isset($this->data['Employee'])){
            if(empty($this->data['Employee']['username'])){
                $this->Employee->invalidate('username','Please Enter User Name');
            }
            else if(empty($this->data['Employee']['password'])){
                $this->Employee->invalidate('password','Please Enter Password');
            }

            else{
                //$project_id = $this->data['Employee']['project_id'];
                $result=$this->Employee->findByUsername($this->data['Employee']['username']);
                $pwd=$result['Employee']['password'];echo $pwd; 
                $emp_id =$result['Employee']['id'];
                if($pwd==md5($this->data['Employee']['password'])){
                    //$this->Session->write('project_id',$project_id);
                    $this->Session->write('emp_id',$emp_id);
                    $this->redirect(array('action' => 'index'));
                }

                else{
                    $this->Session->setFlash(__('Please enter valid username And password to login', true));
                }
            }
        }

フォームの送信中にすべてのエラーメッセージを一緒に表示するにはどうすればよいですか?

4

2 に答える 2

2

このように見えるはずのコントローラーで検証している場合。

if(empty($this->data['Employee']['username'])){
    $this->Employee->invalidate('username','Please Enter User Name');
}
if(empty($this->data['Employee']['password'])){
    $this->Employee->invalidate('password','Please Enter Password');
}

if($this->Employee->validates()) {
    // do your login stuff
}
于 2013-01-02T11:15:05.207 に答える
0

Modelクラスに検証を入れる必要があります。CakePHPはこれらすべてをすぐに処理できます。

CakePHPフォームヘルパーを使用してビューに入力ボックスをレンダリングすると、無効なフォームが送信されるとエラーメッセージが自動的にレンダリングされます。

モデル検証の詳細については、http://book.cakephp.org/2.0/en/models/data-validation.htmlをご覧ください。

たとえば、モデルクラスで

public $validate = array(
    'username' => array(
        'rule'    => 'notEmpty',
        'message' => 'Please enter username'
    )
);

あなたの見解では(で始まるフォーム内$this->Form->create()

<?php echo $this->Form->input('username'); ?>
于 2013-01-02T09:14:49.730 に答える