ajax验证在更新时是唯一的

时间:2016-02-29 09:29:05

标签: php ajax validation yii2

我有独特的ajax验证在创建它工作正常,但当我想更新我不能因为这个显示消息,这个名称已被使用,但我没有owerwrite这个名称它是更新点击数据库的名称。它无关紧要我想要更新它的记录总是显示我已经使用的名称的消息。当我没有将我的输入更改为基础名称时,我可以禁用消息。现在它是如此更新操作自动提交我的输入,但当我没有改变任何思考我有保存

这个错误
<?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]
        ];
    }

1 个答案:

答案 0 :(得分:2)

问题在于:

$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,
]);