模型不显示验证错误

时间:2015-05-11 11:48:40

标签: javascript php html forms yii

我是yii的新手。我的ActiveRecord在调用save()时没有验证。

型号代码:

 public function rules()
    {
        // NOTE: you should only define rules for those attributes that
        // will receive user inputs.
        return array(
            array('firstName, secondName, lastName, gender, phoneNumber, email, address, education_background, basicSalary, departmentID, roleID, contractID, employed_by, reports_to, date_employed', 'required'),
            array('phoneNumber, departmentID, roleID, contractID', 'numerical', 'integerOnly'=>true),
            array('firstName, secondName, lastName', 'length', 'max'=>20),
            array('firstName, secondName, lastName','type', 'type'=>'char','message'=>'This field accepts characters only'),
            array('email','email'),
        );
    }

控制器代码:

public function actionCreate()
{   


    $model=new Employee;
    $message="email already exists";
    // Uncomment the following line if AJAX validation is needed
    // $this->performAjaxValidation($model);

    if(isset($_POST['Employee']))
    {
        $model->attributes=$_POST['Employee'];
        $model->password=md5(strtolower($model->firstName.'123'));
        $to=$model->email;
        $mailmessage="Dear ".$model->lastName." ".$model->firstName."<br> Thanks for your interest in working for XXX Company.
                <br>Please note your login details are :- Email:".$model->email." Password: ".$model->firstName."123<br>
                        You can change password to your preference choice when you login.<br>
                        Kindly Regards<br>
                        HRMS administrator";
        //echo $model->password; exit;
        $criteria=new CDbCriteria();
        $criteria->select='email';
        $criteria->condition='email=:email';
        $criteria->params=array(':email'=>$model->email);
        if($check=Employee::model()->exists($criteria)){

            $this->render('create',array(
                    'model'=>$model,'message'=>$message));
            exit;
            }else{
                $model->save();
                /*if($model->validate()){
                    echo 'valideted';
                    exit;
                }
                else {

                    echo 'not valid';
                    print_r($model->getErrors());
                }
                exit;
                //$model->getErrors();*/

               /*if(){
                echo 'saved';
               }
               else{
                print_r($model->getErrors());
               }
               exit;*/
                $this->mailsend($to,$mailmessage);
                // $cmd=Yii::app()->db->createCommand('select max(employee.employeeID),role.roleName,employee.departmentID  FROM employee JOIN role ON employee.roleID=role.roleID');
                $cmd=Yii::app()->db->createCommand('select employee.employeeID,role.roleName,department.departmentName  FROM employee JOIN department ON employee.departmentID=department.departmentID JOIN role ON employee.roleID=role.roleID
                ORDER BY employee.employeeID DESC LIMIT 1');

                $rstid=$cmd->queryRow(false);
                $id=$rstid[0];
                $role=$rstid[1];
                $dep=$rstid[2];                 
                $history=Yii::app()->db->createCommand();
                $history->insert('history',array(
                    'employeeID'=>$id,
                    'action_to'=>'as '.$role,
                    'department'=>$dep,
                    'reports_to'=>$model->reports_to,
                    'date'=>$model->date_employed,
                    ));
                Yii::app()->session['id']=$model->employeeID;
                $this->redirect(array('view','id'=>$model->employeeID));

            }
        }

    $this->render('create',array(
        'model'=>$model,'message'=>''
    ));
}

查看代码

        <div class="form">
<?php $form=$this->beginWidget('CActiveForm', array(
    'id'=>'employee-form',
    // Please note: When you enable ajax validation, make sure the corresponding
    // controller action is handling ajax validation correctly.
    // There is a call to performAjaxValidation() commented in generated controller code.
    // See class documentation of CActiveForm for details on this.
    'enableAjaxValidation'=>false,
)); ?>

    <p class="note">Fields with <span class="required">*</span> are required.</p>

    <?php echo $form->errorSummary($model); ?>
<table>
<tr><td><?php echo $form->labelEx($model,'firstName'); ?></td>
<td><?php echo $form->textField($model,'firstName',array('size'=>20,'maxlength'=>20)); ?></td>
<td><?php echo $form->error($model,'firstName'); ?></td></tr>
<tr><td><?php echo $form->labelEx($model,'secondName'); ?></td>
<td><?php echo $form->textField($model,'secondName',array('size'=>20,'maxlength'=>20)); ?></td>
<td><?php echo $form->error($model,'secondName'); ?></td></tr>
<tr><td><?php echo $form->labelEx($model,'lastName'); ?></td>
<td><?php echo $form->textField($model,'lastName',array('size'=>20,'maxlength'=>20)); ?></td>
<td><?php echo $form->error($model,'lastName'); ?></td></tr>
<tr><td><?php echo $form->labelEx($model,'gender'); ?></td>
<td><?php echo $form->dropDownList($model,'gender',array('Male'=>'Male','Female'=>'Female')); ?></td>
<td><?php echo $form->error($model,'gender'); ?></td></tr>
<tr><td><?php echo $form->labelEx($model,'phoneNumber'); ?></td>
<td><?php echo $form->textField($model,'phoneNumber'); ?></td>
<td><?php echo $form->error($model,'phoneNumber'); ?></td></tr>
<tr><td><?php echo $form->labelEx($model,'email'); ?>

</td>
<td><?php echo $form->textField($model,'email',array('size'=>50,'maxlength'=>50)); ?></td>
<td style='color:red;'><?php echo $form->error($model,'email'); ?>
<?php  echo $message; ?></td></tr>
<tr><td><?php echo $form->labelEx($model,'address'); ?></td>
<td><?php echo $form->textArea($model,'address',array('size'=>60,'maxlength'=>100)); ?></td>
<td><?php echo $form->error($model,'address'); ?></td></tr>
<tr><td><?php echo $form->labelEx($model,'education_background'); ?></td>
<td><?php echo $form->textArea($model,'education_background',array('size'=>60,'maxlength'=>300)); ?></td>
<td><?php echo $form->error($model,'education_background'); ?></td></tr>


<tr><td><?php echo $form->labelEx($model,'roleID'); ?></td>
<td><?php echo $form->dropDownList($model,'roleID',CHtml::listData(Role::model()->findAll(),'roleID','roleName'),
        array(

        'ajax' => array(
        'type'=>'POST', 
        'dataType'=>'json',
        'url'=>CController::createUrl('employee/getSalary'),
        'success'=>'function(data){
        $("#Employee_basicSalary").val(data.data1);
}'),        
'prompt'=>'select'
)); ?></td>
<td><?php echo $form->error($model,'roleID'); ?></td></tr>

<tr>

<td><?php echo $form->labelEx($model,'basicSalary'); ?></td>
<td>
<?php echo $form->textField($model,'basicSalary',array('size'=>10,'maxlength'=>10)); ?>
</td>
<td><?php echo $form->error($model,'basicSalary'); ?></td>



</tr>
<tr><td><?php echo $form->labelEx($model,'departmentID'); ?></td>
<td><?php echo $form->dropDownList($model,'departmentID',CHtml::listData(Department::model()->findAll(),'departmentID','departmentName')); ?></td>
<td><?php echo $form->error($model,'departmentID'); ?></td></tr>

<tr><td><?php echo $form->labelEx($model,'date_employed'); ?></td>
<td>    <?php $this->widget('zii.widgets.jui.CJuiDatePicker',array(
                           'name'=>'Employee[date_employed]',
                            'id'=>'Employee_date_employed',
                            'value'=>$model->date_employed,
                                'options'=>array(
                                        'dateFormat'=>'yy-mm-dd',
                                'showAnim'=>'fold',
                                ),
                                'htmlOptions'=>array(
                                'style'=>'height:20px;'
                                ),
                        )); 
         ?></td>
<td><?php echo $form->error($model,'date_employed'); ?>



</td></tr>
<tr><td><?php echo $form->labelEx($model,'contractID'); ?></td>
<td>    <?php echo $form->dropDownList($model,'contractID',CHtml::listData(Contract::model()->findAll(),'contractID','contractName'),
        array(
        'ajax' => array(
        'type'=>'POST', 
        'dataType'=>'json',
        'url'=>CController::createUrl('employee/getContDate'),
        'success'=>'function(data){
        $("#Employee_endcontract").val(data.data1);
}'),        
'prompt'=>'select'
)); ?></td>
<td><?php echo $form->error($model,'contractID'); ?></td></tr>
<tr><td><?php echo $form->labelEx($model,'endcontract'); ?></td><td><?php echo $form->textField($model,'endcontract');?></td></tr>
<tr><td><?php echo $form->labelEx($model,'employed_by'); ?></td>
<td><?php echo $form->textField($model,'employed_by',array('size'=>50,'maxlength'=>50)); ?></td>
<td><?php echo $form->error($model,'employed_by'); ?></td></tr>
<tr><td><?php echo $form->labelEx($model,'reports_to'); ?></td>
<td><?php echo $form->dropDownList($model,'reports_to',array('Senior Manager'=>'Senior Manager','Assistant Manager'=>'Assistant Manager','System Administrator'=>'System Administrator')); ?></td>
<td><?php echo $form->error($model,'reports_to'); ?></td></tr>

<tr><td></td><td>   <?php echo CHtml::submitButton($model->isNewRecord ? 'Create' : 'Save'); ?></td><td></td></tr>
</table>

<?php $this->endWidget(); ?>

</div><!-- form -->

此模型不会验证,也不会显示错误。有什么帮助吗?

1 个答案:

答案 0 :(得分:0)

  1. 您可以在模型中检查电子邮件的唯一性(最好使用scenarios)。
  2. 您可以在模型中创建与部门和角色表的关系。
  3. 型号代码:

    public function rules() {
        // it will be good to use scenarios
        return array(
            array('firstName, secondName, lastName, gender, phoneNumber, email, address, education_background, basicSalary, departmentID, roleID, contractID, employed_by, reports_to, date_employed', 'required'),
            array('phoneNumber, departmentID, roleID, contractID', 'numerical', 'integerOnly'=>true),
            array('firstName, secondName, lastName', 'length', 'max'=>20),
            array('firstName, secondName, lastName','type', 'type'=>'char','message'=>'This field accepts characters only'),
            array('email','email'),
            array('email','unique'),
        );
    }
    
    public function relations() {
        return array(
            'department' => array(self::BELONGS_TO, 'Department', 'departmentID'), // Department CActivRecord model of `department` table
            'role' => array(self::BELONGS_TO, 'Role', 'roleID'), // Role CActivRecord model of `role` table
        );
    }
    

    控制器创建操作代码:

    public function actionCreate() {
    
        $model=new Employee;
        // Uncomment the following line if AJAX validation is needed
        // $this->performAjaxValidation($model);
    
        if(isset($_POST['Employee'])) {
            $model->attributes=$_POST['Employee'];
            $model->password=md5(strtolower($model->firstName.'123'));
    
            if($model->save()) {
                $mailmessage="Dear ".$model->lastName." ".$model->firstName."<br> Thanks for your interest in working for XXX Company.
                    <br>Please note your login details are :- Email:".$model->email." Password: ".$model->firstName."123<br>
                            You can change password to your preference choice when you login.<br>
                            Kindly Regards<br>
                            HRMS administrator";
                $this->mailsend($model->email, $mailmessage);
    
                Yii::app()->db->createCommand()->insert('history',array(
                    'employeeID'=>$model->employeeID,
                    'action_to'=>'as '.$model->role->roleName,
                    'department'=>$model->department->departmentName,
                    'reports_to'=>$model->reports_to,
                    'date'=>$model->date_employed,
                ));
                Yii::app()->session['id']=$model->employeeID;
                $this->redirect(array('view','id'=>$model->employeeID));
            }
        }
        $this->render('create',array(
            'model'=>$model,
        ));
    }
    

    您也可以在enableClientValidation窗口小部件中将true设置为CActiveForm以启用js验证。