簡體   English   中英

模型未顯示驗證錯誤

[英]model not displaying validation errors

我是新來的。 調用save()時,我的ActiveRecord無法驗證。

型號代碼:

 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. 您可以在模型中檢查電子郵件的唯一性(使用場景非常有用)。
  2. 您可以在模型中與部門表和角色表創建關系。

型號代碼:

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

您也可以在CActiveForm小部件中將enableClientValidation設置為true以啟用js驗證。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM