由于更新操作上的唯一验证器获取错误('此用户名已被占用')我想在新用户名值不等于prev值时验证更新操作上的用户名,这是我的规则:
[['username'], 'unique', 'on'=>'update', 'when' => function($model){
return static::getOldUsername($model->id) !== $model->username;
}
],
Run Code Online (Sandbox Code Playgroud)
并且我的功能是获得上一个用户名值:
public static function getOldUsername($id)
{
return static::findIdentity($id)->username;
}
Run Code Online (Sandbox Code Playgroud)
但它不起作用,我认为$ model-> getId()没有返回任何因为静态id(例如:23)它的工作.
[['username'], 'unique', 'on'=>'update', 'when' => function($model){
return static::getOldUsername(23) !== $model->username;
}
],
Run Code Online (Sandbox Code Playgroud)
我怎样才能获得模特ID?或者,如果您有其他方法可以在更新操作上跳过yii2唯一验证,如果新值等于prev值,请解释一下.
提前致谢
我有一个在弹出窗口中打开的表单,所以我想通过 ajax 验证来验证我的表单,但是当我点击提交按钮时,我的页面会刷新,所以我没有收到任何验证错误
查看文件:
<?php $form = ActiveForm::begin([
'id' => 'signup-form',
'enableAjaxValidation' => true,
//'action' => Url::toRoute('user/ajaxregistration'),
'validationUrl' => Url::toRoute('user/ajaxregistration')
]); ?>
<div class="col-md-12">
<div class="formbox">
<div class="inputbox signup">
<div class="input-group"> <span class="input-group-addon"><i class="glyphicon name"></i></span>
<?= Html::textInput('userFullName', '', ['placeholder' => "Name",'class'=>'form-control']); ?>
</div>
<?php ActiveForm::end(); ?>
Run Code Online (Sandbox Code Playgroud)
控制器文件:
public function actionValidate() {
$model = new SignupForm;
if (Yii::$app->request->isAjax && $model->load(Yii::$app->request->post())) {
Yii::$app->response->format = Response::FORMAT_JSON;
return ActiveForm::validate($model); \Yii::$app->end();
}
}
Run Code Online (Sandbox Code Playgroud)
型号代码:
return [
['userFullName', 'trim'],
['userFullName', 'required'],
];
Run Code Online (Sandbox Code Playgroud)
请建议我应该怎么做,以便我的页面不会被刷新,并且我会收到验证错误