我是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 -->
此模型不会验证,也不会显示错误。有什么帮助吗?
答案 0 :(得分:0)
型号代码:
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验证。