私が作業しているアプリケーション(オーダーフォーム)では、ユーザーが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を実装していません) 。これをどうやって正しい方向に進んでいますか?これを動作させるために私はどのような変更を加える必要がありますか?