2016-03-22 205 views
0

我遇到了字段验证问题。验证表单中的字段 - 检查CakePhp 3中是否存在“产品”

我想通过模型验证表单。我想检查是否存在具有某种价值的字段。

我想阻止使用一些标题不止一次。

例如

如果场“网站”标题为“主”,在数据库中存在,则无法验证表单。

如果它不存在,您可以传递它。

我想允许用户只添加一个标题为“主”的“网站”,但他可以在任何情况下添加任何其他标题的“网站”。

你有一些想法如何解决它?

+0

如果你告诉我们你的表结构和要验证领域这将是一个容易许多。 –

回答

1

我想你有两个选择。

(1)设置一个Ajax请求到服务器。

要做到这一点:

  • 创建一个功能,即响应一个Ajax请求,在()你SiteController命名检查名

    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; 
}