【发布时间】:2017-05-24 11:53:18
【问题描述】:
我想验证一个名为 survey_id 的字段,它是用户输入的唯一性。添加新记录时它工作正常并给出正确的响应,但是当我尝试编辑此记录时,它给出了错误[unique] => Provided value already exist。所以我想要的是从唯一性检查中排除当前记录的survey_id,如果用户为survey_id 输入其他值,它应该检查唯一性搜索。
目前我正在使用 CakePHP 3.0 验证和创建验证。这是我正在使用的验证规则:
validator
->requirePresence('survey_id', __('msg_required'))
->notEmpty('survey_id', __('msg_required'))
->maxlength('survey_id', 32, __('msg_maxlength'))
->add('survey_id', 'unique', ['rule' => ['validateUnique',['id']], 'provider' => 'table', 'message' => 'Provided value already exist', 'on'=>'create']);
return $validator;
这段代码有什么问题吗?
提前致谢。 `
【问题讨论】:
-
我的用例是如果用户编辑其他详细信息但不更改survey_id?好吧,这验证失败,因为它不是唯一的! survey_id 存在于数据库中,它属于试图更改其个人资料其他方面的用户。我们该如何处理呢?或者如果用户更改并提供其他一些survey_id,它应该检查除当前survey_id之外的唯一性检查
-
您需要创建自定义验证方法才能完成此操作。请参考此book.cakephp.org/3.0/en/core-libraries/… 请同时检查您的表/模型中的 buildRules()。
-
嗨 justrohu 我尝试创建自定义验证,但是如何传递表的当前 id 以便将其从当前上下文中排除 $validator ->add('survey_id', 'custom' , [ 'rule' => function ($value, $id) use ($id) { $data = $this->getSurveyId($value, array($id)); return (!empty($data)) ? false : true; }, 'message' => '标题无效' ]);那么如何在这种情况下获取 $id
-
对于编辑,表的当前 id 存在于 $context / request 数据中。