Наименование элементов Zend_Form - PullRequest
1 голос
/ 25 июля 2011

Я хочу автоматически добавить префикс к моим элементам Zend_Form, чтобы мне было проще отображать их в моих моделях, когда я отправляю форму. Например, у меня есть одна форма с элементами, которые относятся к двум моделям.

Я создаю форму примерно так:

    $this->setMethod('post');

    $this->addElement('text', 'name', array(
        'label'     => 'Your Name',
        'required'  => true,
    ));

    $this->addElement('text', 'tel', array(
        'label'     => 'Your Telephone',
        'required'  => true,
    ));     

    $this->addElement('text', 'email', array(
        'label'     => 'Your Email Address',
        'required'  => true,
        'filters'   => array('StringTrim','StringToLower'),
        'validators'    => array('EmailAddress'),
    ));

    $this->addElement('password', 'password', array(
        'label'     => 'Your Password',
        'required'  => true,
    ));

    $this->addElement('text', 'surgery_name', array(
        'label'     => 'Surgery Name',
        'required'  => true,
    ));

Проблема в том, что в поле «Имя хирургии» необходимо вручную ставить префикс хирургии_. В идеале я хотел бы установить префикс для первого набора полей (скажем, пользователя), а затем установить префикс для второго набора полей (скажем, хирургии).

Тогда мои имена элементов будут выглядеть примерно так:

User.Name User.Email User.Tel

Surgery.Name

и т.д.

Тогда, когда я приду, чтобы сопоставить их с моей моделью, должно быть легче определить, какие поля FORM отображать.

Ответы [ 2 ]

4 голосов
/ 25 июля 2011

Это то, для чего были созданы подформы.Итак, в вашем случае вы должны сделать:

$this->setMethod('post');

$user = new Zend_Form_SubForm();

$user->addElement('text', 'name', array(
    'label'     => 'Your Name',
    'required'  => true,
));

$user->addElement('text', 'tel', array(
    'label'     => 'Your Telephone',
    'required'  => true,
));     

$user->addElement('text', 'email', array(
    'label'     => 'Your Email Address',
    'required'  => true,
    'filters'   => array('StringTrim','StringToLower'),
    'validators'    => array('EmailAddress'),
));

$user->addElement('password', 'password', array(
    'label'     => 'Your Password',
    'required'  => true,
));

$this->addSubForm($user, 'user');


$surgery = new Zend_Form_SubForm();

$surgery->addElement('text', 'name', array(
    'label'     => 'Surgery Name',
    'required'  => true,
));

$this->addSubForm($surgery, 'surgery');

элементы формы будут иметь имена: user[name] user[tel] surgery[name] и так далее, так что тогда будет легко извлечь данные.Вы также можете проверить формы самостоятельно, разделить их на отдельные классы (чтобы вы могли включить их в другие формы) и целый ряд других вещей.

Дополнительная информация в руководстве: http://framework.zend.com/manual/en/zend.form.forms.html#zend.form.forms.subforms

1 голос
/ 25 июля 2011

Одна вещь, которую я делаю, чтобы помочь мне в переходе от формы к модели, - это выполнить одно или оба из следующих действий:

  • Создать функцию для преобразования в / из форм и последовательно именовать элементыиз формы в форму (если у меня есть несколько форм, которые по какой-то причине редактируют одну и ту же модель) и используют его для возврата объекта модели
  • Создайте конструктор или метод модели, который будет использовать массив записей и отобразит егоправильно, а также метод toArray или toForm, который будет выдавать значения в ассоциативном массиве, который может использоваться аналогично
...