Другой подход заключается в использовании ajax-вызова метода контроллера, который возвращает требуемые входные данные формы, и вставляет их после существующих. Если вы создаете элемент для ваших представлений только с этой частью формы, вы можете повторно использовать этот элемент в ваших add()
и edit()
представлениях, а также для представления Ajax. Затем вы также можете использовать FormHelper для его генерации.
ОБНОВЛЕНИЕ Вот пример того, как это будет работать.
В вашем app_controller включите RequestHandler в ваши компоненты:
var $components = array('RequestHandler');
А также поместите это в ваш метод beforeFilter в app_controller:
if($this->RequestHandler->isAjax()){
Configure::write('debug', 0); // forget debug messages
$this->layout = 'ajax'; //and use ajax layout
}
Тогда у вас будет простой метод контроллера для вызова ajax:
function add_time() {
$this->render('time');
}
time.ctp
также может быть очень простым, и просто ссылаться на элемент:
echo $this->element('time_form');
Элемент с именем "time_form.ctp" (в этом примере), который имеет только часть формы, которую вы хотите (например, первый блок кода из вопроса). Затем в ваших представлениях add()
и edit()
в контроллере ресторана вызовите один и тот же элемент (фактически вам нужно будет передать данные, чтобы сообщить, какие значения уже были сохранены в представлении edit()
):
<fieldset>
<legend>Times</legend>
<div id="times">
<?php echo $this->element('time_form'); ?>
</div>
</fieldset>
Затем включите ссылку на запрос, которая вызовет ваш метод add_time()
и поместите результаты в #times
. Вы можете использовать JsHelper для этого:
http://book.cakephp.org/view/1593/Methods
Проверьте методы request()
и link()
. Это просто общая схема того, как это будет работать. Вам нужно выяснить, какие значения передать, чтобы определить ключи элемента формы и т. Д.
Надеюсь, это поможет.