简体   繁体   English

模型未显示验证错误

[英]model not displaying validation errors

I am new to yii. 我是新来的。 My ActiveRecord doesn't validate when save() is called. 调用save()时,我的ActiveRecord无法验证。

model codes: 型号代码:

 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'),
        );
    }

controller codes: 控制器代码:

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'=>''
    ));
}

view codes 查看代码

        <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 -->

This model does not validate and also doesn't display errors. 此模型无法验证,也不会显示错误。 Any help please? 有什么帮助吗?

  1. You can check uniqueness of email in model (will be good to use scenarios ). 您可以在模型中检查电子邮件的唯一性(使用场景非常有用)。
  2. You can create relations with department and role tables in your model. 您可以在模型中与部门表和角色表创建关系。

Model code: 型号代码:

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
    );
}

Controller create action code: 控制器创建动作代码:

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,
    ));
}

Also you can set enableClientValidation to true in CActiveForm widget to enable js validation. 您也可以在CActiveForm小部件中将enableClientValidation设置为true以启用js验证。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM