Массовое создание пользователей в Zend Framework. Уже есть создание одного пользователя для работы - PullRequest
0 голосов
/ 21 февраля 2011

Я использую Zend Framework. У меня есть форма, которая позволяет мне создавать пользователя.Он имеет все необходимые проверки и работает хорошо.

Мне было поручено создать одну страницу, которая позволит мне создать до 25 новых пользователей за одну отправку.

пример:

  • приветствие / имя/ фамилия / электронная почта
  • приветствие / имя / фамилия / электронная почта
  • приветствие / имя / фамилия / электронная почта
  • приветствие / имя / фамилия / электронная почта

Как я могу использовать форму, которую я создал, для одного пользователя и позволить каждому новому пользователю проходить валидацию отдельно?

Есть ли какой-нибудь способ иметь массив форм или что-то еще, что достигнет того же самого?

1 Ответ

3 голосов
/ 21 февраля 2011

Попробуйте что-то вроде этого (не проверено):

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() в форме.

...