2017-02-17 8 views
0

Приложение, над которым я работаю (форма заказа), позволяет пользователю вводить несколько подзаписей в iframe. Эти субзаписи соединены с основной записью с помощью внешнего ключа.CakePHP: проверка позиции в iframe перед отправкой родительской формы

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

Мне нужно приложение, чтобы проверить, существует ли хотя бы одна позиция внутри этого iframe перед отправкой формы. Я бы хотел использовать функциональные возможности $ validate в модели, но я не уверен, как действовать дальше. Вот что я пробовал в модели Main:

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

Я также отслеживаю, была ли эта позиция удалена. Если он есть, то он не добавляется к $ строкам.

Я знаю, что могу выполнить это в Контроллере, но, насколько я знаю, для этого потребуется форма для публикации, и пользователь потеряет любые изменения после обратной передачи (я еще не реализовал jQuery в этой форме) , Я на правильном пути, как это сделать? Какие изменения я должен внести, чтобы заставить это работать?

ответ

0

Ваш код выглядит правильно, но проверка действительно происходит в форме submit. Если вы хотите проверить его до того, что вы должны сделать в JavaScript (jquery). Например. создайте действие контроллера, возвращаемое, если есть существующие позиции для данного идентификатора основной записи и вызывают его через AJAX.