Попробуйте что-то вроде этого (не проверено):
class BulkUserForm extends Zend_Form
{
private $_howMany = 1;
public function __construct( $howMany, $options )
{
$this->_howMany = (int) $howMany;
parent::__construct( $options );
}
public function init()
{
for( $i = 1; $i <= $this->_howMany; $i++ )
{
$userForm = new YourOriginalUserForm();
$userForm->setElementsBelongTo( 'user' . $i ); // not sure this is actually necessary anymore, because of the second param to addSubForm
$this->addSubForm( $userForm, 'user' . $i, $i );
}
}
}
Использование:
$form = new BulkUserForm( 25 /* [, $options ] */ );
echo $form;
// validation:
$form->isValid( $this->getRequest()->getPost() ); // or something similar
Объяснение:
Вызов setElementsBelongTo()
для подчиненных форм должен создавать нотации, похожиек этому (упрощенно, конечно):
<input type="radio" name="user1[salutation]">
<input type="text" name="user1[firstName]">
<input type="text" name="user1[lastName]">
<input type="text" name="user1[email]">
Ваша форма должна иметь возможность автоматически распознавать отправленные значения POST при проверке.
Конечно, вы, вероятно, также должны изучить раскладку /оформление бланков, но я оставлю это вам в качестве упражнения.; -)
РЕДАКТИРОВАТЬ
Извините, второй параметр в addSubForm()
является обязательным (добавлен сейчас, а также добавлен необязательный параметр $order
).Я полагаю, что он также должен автоматически настроить вложенную форму, чтобы она уже принадлежала правильному пространству имен.Хотя не совсем уверен в этом.Посмотрите, что произойдет, если вы пропустите вызов setElementsBelongTo()
в форме.