Я не уверен, что могу дать вам полный ответ на ваш вопрос, но, надеюсь, я могу дать вам пару идей.
Я попал в похожую ситуацию, когда пытался создать систему администратора дляопросы.
В каждом опросе было много опций опроса, и я хотел, чтобы на моей странице опроса polls / admin_edit было динамически добавлено столько опций опроса, сколько необходимо.
Мне удалось это сделать с помощью встроенного в CakePHPфункциональность плюс немного Javascript.
При создании формы в представлении admin_edit я сначала вставил поля опроса и добавил, что добавлено:
<div id="poll-options">
<?php
if (isset($this->data['PollOption'])) {
$i = 0;
foreach ($this->data['PollOption'] as $opt) {
echo $form->hidden("PollOption.$i.id");
echo $form->input("PollOption.$i.name", array('label' => "Option " . ($i + 1)));
$i++;
}
}
?>
</div>
$this->data
в ОпросыКонтроллер.Если опрос уже имел связанные варианты опроса, они также включались в $this->data
.Кроме того, если форма уже была отправлена и были ошибки проверки, все необходимые поля PollOption были построены заново, когда страница отображалась, потому что они все еще находились в $this->data
от контроллера.
Так что позаботились оубедившись, что у меня всегда были нужные мне поля в представлении.
Когда форма была отправлена, я попытался сохранить данные с помощью простого
$this->Poll->saveAll($this->data, array('atomic' => false, 'validate' => 'first'));
(Вы можете проверить CakePHP APIили документы, если вы не уверены в приведенном выше синтаксисе)
Я использовал Javascript (jQuery) для динамического добавления полей PollOption:
$('#add-option-button').click(function(event){
var optionCount = $('#poll-options > div').size() + 1;
var inputHtml = '<div class="input text"><label for="PollOption' + optionCount + 'Name">Option ' + optionCount
+ '</label><input id="PollOption' + optionCount + 'Name" type="text" name="data[PollOption][' + optionCount + '][name]" /></div>';
event.preventDefault();
$('#poll-options').append(inputHtml);
});
Вы упомянули, что делали это самостоятельно, ноу вас не должно возникнуть проблем с этим, если вы не пытаетесь использовать компонент Security в форме.
Надеюсь, это поможет вам указать правильное направление или, возможно, даст вам некоторые идеи.