2017-02-17 13 views
0

私が作業しているアプリケーション(オーダーフォーム)では、ユーザーがiframe内に複数のサブレコードを入力できます。これらのサブレコードは、外部キーを介してメインレコードに結合されます。CakePHP:親フォームを送信する前にiframe内の広告申込情報を確認してください

main_records    line_items 
-----------     ----------  
id int(11) PK etc.   id int(11) PK etc. 
          main_record_id (FK) 

私には、少なくとも1つの行項目がフォームの送信前にこのはiframe内に存在するかどうかをチェックするアプリが必要。モデル内の$ validate機能を利用したいと思いますが、どのように処理するのかは分かりません。メインモデルで試したことは次のとおりです。

App::uses('AppModel', 'Model', 'LineItem'); 

public $hasMany = array(
    'LineItem' => array(
     'className' => 'LineItem', 
     'foreignKey' => 'main_record_id', 
     'dependent' => false 
    ) 
); 

public $validate = array(
    'main_record_id' = array(
     'allowEmpty' => false, 
     'rule' => 'checkForLineItem', 
     'message' => 'You must enter at least one line item!' 
    ) 
); 

//Check to make sure there is at least one line item before saving changes/submitting for approval 
function checkForLineItem($id) { 
    $lines = $this->LineItem->find('all', array(
     'fields' => array('LineItem.main_record_id'), 
     'conditions' => array('LineItem.main_record_id'=>$id, 'LineItem.deleted_record'=>0)) 
    ); 
    if(!empty($lines)) { 
     return true; 
    } else { 
     return false; 
    } 
} 

また、広告申込情報が削除されたかどうかを追跡します。もしあれば、それは$ linesに追加されません。

コントローラでこれを実現できることはわかっていますが、わかっている限り、フォームに投稿する必要があり、ユーザーはポストバック時に変更を失います(まだこのフォームでjQueryを実装していません) 。これをどうやって正しい方向に進んでいますか?これを動作させるために私はどのような変更を加える必要がありますか?

答えて

0

あなたのコードは正しく表示されますが、実際にフォーム提出で検証が行われます。それ以前にチェックしたい場合は、JavaScript(jquery)で行う必要があります。例えば。指定されたメインレコードIDに既存のラインアイテムがあるかどうかを返し、AJAX経由で呼び出すコントローラーアクションを作成します。

関連する問題