Нотация массива Zend_Form и имена пустых элементов - PullRequest
5 голосов
/ 28 октября 2009

Я хочу сделать:

<input type="text" value="" name="foo[]" />
<input type="text" value="" name="bar[]" />

но Zend_Form_Element требует (строковое) имя, поэтому мне нужно сделать:

$this->addElement('text', '1', array(
    'belongsTo' => 'foo'
));

$this->addElement('text', '2', array(
    'belongsTo' => 'bar'
));

но вывод:

<input id="foo-1" type="text" value="" name="foo[1]" />
<input id="bar-2"  type="text" value="" name="bar[2]" />

Я также могу принять вывод как:

<input id="foo-1" type="text" value="" name="foo[1]" />
<input id="bar-1"  type="text" value="" name="bar[1]" />

но Zend_Form_Element переписывает элементы с тем же именем

есть ли способ сделать то, что мне нужно?

Ответы [ 2 ]

7 голосов
/ 16 мая 2011

Для нескольких значений:

$foo = new Zend_Form_Element_Text('foo');
// Other parameters
$foo->setIsArray(TRUE);
$this->addElement($foo);

Генерирует: name="foo[]"

-

Если вы ищете данные ключи, например name="foo[bar]", используйте:

$bar= new Zend_Form_Element_Text('bar');
// Other parameters
$bar->setBelongsTo('foo');
$this->addElement($bar);

-

Проверено на ZF 1.11.5

0 голосов
/ 22 июня 2010

класс MyFooForm расширяет Zend_Form { публичная функция init () { $ fullNameOpts = array ( 'Требуется' => ложно, 'Метка' => 'FULLNAME', 'IsArray' => верно, 'validators' => array (array ('stringLength', false, array (1, 250))) ); $ this-> addElement ('text', 'fullName', $ fullNameOpts); // остальные элементы, формы и прочее } }

И это создает

<dd id="fullName-element"><input type="text" class="inputAccesible" value="" id="fullName"name="fullName[]"></dd>

Он находится в Element.php, в форме, строка 512, проверка «isArray». Я использую обычную zend_form, crossValidation с настраиваемыми валидаторами и выдвигаю подчиненные формы для репликации основной формы, потому что пользователь может добавлять несколько раз одну и ту же форму. Кроме того, мне слишком лень исследовать пользовательские декораторы, я создал один, но он убивает подформы и обозначения массивов, так что я просто придерживаюсь обычных, и это решает.

Я нахожусь на Zf 1.10.

...