2016-03-22 397 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; 
}