Спасибо Андрею за то, что он указал мне правильное направление. Мне удалось клонировать форму и даже добавить ссылку для удаления последних клонированных входов. Это решение не потребует от меня создания формы в javascript, поэтому все форматы по-прежнему не повреждены и требуют меньше кода для записи.
Я знаю, что это испортит компоненты Auth, и моя форма будет заблокирована, поскольку хэш будет неправильным. Я должен буду вручную почистить его в бэкэнде позже. В основном я заменяю первое поле с идентификатором от 1 до текущего приращения. Три места, которые, как я вижу, нуждаются в уникальном имени и идентификаторе, - это метка, имя ввода и идентификатор ввода. Я не знаю, есть ли у кого-нибудь лучшее решение для замены этих значений HTML, но я должен преобразовать его туда и обратно, чтобы заменить его.
Вот мое решение:
// HTML
<div id="user">
<div class="users">
<h4>User #1</h4>
<?php echo $form->input("User.1.first_name", array(
'label' => 'First Name',
'error' => 'Please enter a valid first name.'
));?>
<?php echo $form->input("User.1.last_name", array(
'label' => 'First Name',
'error' => 'Please enter a valid last name.'
));?>
</div>
</div>
<div id="moreUsers"></div>
// Javascript код:
var currentUserCount = 1;
$('#addUser').click(function(){
currentUserCount = cloning('#user', '#moreUser', currentUserCount);
return false;
});
$('#removeUser').click(function(){
$('.users:last').remove();
currentUserCount--;
}
return false;
});
function cloning(from, to, counter) {
var clone = $(from).clone();
counter++;
// Replace the input attributes:
clone.find(':input').each(function() {
var name = $(this).attr('name').replace(1,counter);
var id = $(this).attr('id').replace(1,counter);
$(this).attr({'name': name, 'id': id}).val('');
});
// Replace the label for attribute:
clone.find('label').each(function() {
var newFor = $(this).attr('for').replace(1,counter);
$(this).attr('for', newFor);
});
// Replace the text between html tags:
clone = clone.html().replace(1,counter);
$(to).before(clone);
return counter;
} // end cloning