2016-03-22 7 views
0

フィールドの検証に問題があります。フィールドをフォームで検証する - "product"がCakePhpに存在するかどうかをチェックする3

私はモデルからフォームを検証したいと思います。私はいくつかの値を持つフィールドが存在するかどうかを確認したい。

いくつかのタイトルを複数回使用してブロックしたいと思います。例えば

タイトル「メイン」とフィールド「サイト」はデータベース内に存在する場合、フォームを検証することはできません。

存在しない場合は、渡すことができます。

タイトル「メイン」の「サイト」を1つだけ追加できますが、他のタイトルの「サイト」も追加できます。

解決方法を知りましたか?

+0

に次の関数を追加することができます行うには、あなたのテーブル構造について教えてとフィールドを使用して、検証したい場合には、全体の多く容易になります。 –

答えて

1

あなたには2つの選択肢があると思います。

(1)サーバーにAjaxリクエストを設定します。そうするには

  • はcheckName(という名前のSiteControllerで、Ajaxリクエストに応答機能を作成します)

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