我对唯一有 ajax 验证,创建它工作正常,但是当我想更新时,我不能显示此名称已被使用的消息,但我不欠写这个名称它是更新单击时数据库中的名称。我想更新它始终向我显示名称已被使用的消息并不重要。当我不将输入更改为基本名称时,我可以禁用消息。现在它是如此更新操作自动提交了我的输入,但是当我不更改任何想法时,我在保存时遇到此错误
<?php $form = ActiveForm::begin(['options' => ['enctype' => 'multipart/form-data'], 'id'=>$model->formName(), 'enableAjaxValidation'=>true, 'validationUrl'=>Url::toRoute('category/validation')]) ?>
我的控制器:
public function actionValidation(){
$model= new SmCategory;
if(Yii::$app->request->isAjax && $model->load(Yii::$app->request->post()))
{
Yii::$app->response->format='json';
return ActiveForm::validate($model);
}
}
我的规则:
public function rules()
{
return [
[['Name'], 'required'],
['Name', 'unique', 'targetClass' => 'common'models'Smcategory', 'message' => 'This name has already been taken.'],
[['Rel_Category', 'IsDeleted'], 'integer'],
[['File'],'file'],
[['Name', 'Label'], 'string', 'max' => 45],
[['Picture'], 'string', 'max' => 255]
];
}
问题就在这里:
$model= new SmCategory;
此代码可以创建,不能用于更新,因为它不会使用现有模型进行验证,它可以(只是一个示例,假设 id 是主键):
public function actionValidation($id = null)
{
$model = $id===null ? new SmCategory : SmCategory::findOne($id);
if(Yii::$app->request->isAjax && $model->load(Yii::$app->request->post()))
{
Yii::$app->response->format='json';
return ActiveForm::validate($model);
}
}
您可以在视图中更新validationUrl
:
$validationUrl = ['category/validation'];
if (!$model->isNewRecord)
$validationUrl['id'] = $model->id;
$form = ActiveForm::begin([
'options' => ['enctype' => 'multipart/form-data'],
'id' => $model->formName(),
'enableAjaxValidation' => true,
'validationUrl' => $validationUrl,
]);