【问题标题】:ajax validation unique on updateajax 验证在更新时唯一
【发布时间】:2016-02-29 09:29:04
【问题描述】:

我在创建时对唯一进行了 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]
        ];
    }

【问题讨论】:

  • 在模型规则中添加scenario。并参考:stackoverflow.com/questions/31252747/…
  • 我试图做一些场景,但我想让这个在创建和更新操作上独一无二
  • 你能给我看一下 Yii 的新例子吗?我不知道怎么做我尝试过这个场景,但它仍然不适合我
  • 添加 ['Name', 'unique', 'targetClass' =&gt; 'common\models\Smcategory', 'message' =&gt; 'This name has already been taken.', 'on' =&gt; 'create'], 并在控制器中添加 $model-&gt;scenario = 'create';
  • 但是在更新时它不起作用我也想在更新时也有这个规则

标签: php ajax validation yii2


【解决方案1】:

问题就在这里:

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

【讨论】:

    猜你喜欢
    • 2014-06-28
    • 2018-08-09
    • 2019-02-26
    • 2014-08-20
    • 2018-07-17
    • 2017-10-05
    • 2018-10-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多