简体   繁体   中英

model not displaying validation errors

I am new to yii. My ActiveRecord doesn't validate when save() is called.

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.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

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