我在现场验证方面遇到了问题。
我想通过模型验证表单。我想检查是否存在具有某些值的字段。
我想不止一次阻止使用某些游戏。
例如
如果字段"网站"标题" Main"存在于数据库中,您无法验证表单。
如果它不存在,您可以传递它。
我想允许用户只添加一个" Site"标题" Main",但他可以添加" Site"在任何情况下都有任何其他头衔。
您是否知道如何解决它?
答案 0 :(得分:1)
我认为你有两种选择。
(1)向服务器设置Ajax请求。
这样做:
在SiteController中创建一个响应Ajax请求的函数,名为checkName()
public function checkName($name) {
// allow ajax requests
$this->request->allowMethod(['ajax']);
// perform your check within the db
$isExistent = [...];
// prepare the response
$response = ['name' => $name, 'isExistent' => $isExistent];
if ($this->request->isAjax()){
$this->autoRender = false;
$this->response->disableCache();
$this->response->type(['json' => 'application/json']);
$this->response->body(json_encode($response));
}
}
使用选项'_ext' => 'json'
准备调用已定义路由的Javascript Ajax函数,并将其附加到输入字段的onchange属性中。 (有关简单示例,请参阅此链接:http://www.w3schools.com/jquery/ajax_ajax.asp)
(2)制作'名称'站点表的字段唯一。
为此,您可以将以下功能添加到SiteTable类
public function buildRules(
RulesChecker $rules
) {
$rules->add($rules->isUnique(['name']));
return $rules;
}