Как добавить '[]' для формирования имени элемента в Zend_Form? - PullRequest
2 голосов
/ 12 июня 2011

Я создаю элементы формы, подобные этим

    $elements = array();

    $element = $this->CreateElement('checkbox', 'field[0]' );
    $element->setLabel( 'MyField1' );
    $element->setAttrib( 'checked', true );
    $elements[] = $element;

    $element = $this->CreateElement('checkbox', 'field[1]' );    
    $element->setLabel( 'MyField2' );
    $element->setAttrib( 'checked', true );
    $elements[] = $element;

    $this->addElements( $elements );

Но он устанавливает name='field0' и name='field1' вместо name='field[0]' и name='field[1]'

Как мы можем добавить [] в именах элементов?

Спасибо

Ответы [ 5 ]

2 голосов
/ 24 сентября 2012

Я прочитал 2 вида решений, одно из них setElementsBelongTo, другое - setIsArray, но решения мне неудобны, почему они заключают в скобки, я не понимаю.Я думаю, что один из способов - просто отредактировать функцию фильтра, чтобы разрешить скобки.

1 голос
/ 12 июня 2011

Я думаю, что он не поддерживается в форме Zend только в:

Zend_Form_SubForm

как

$foo = new Zend_Form_SubForm();
$foo->setElementsBelongTo('foo')
    ->setElements(array(
        'bar' => 'text',
        'baz' => 'text'
    ));
echo $foo;

который даст вам:

<input type="text" name="foo[bar]" id="foo.bar" value="" />
<input type="text" name="foo[baz]" id="foo.baz" value="" />
1 голос
/ 12 июня 2011
0 голосов
/ 20 сентября 2013

Это работает для меня

$file = $this->createElement('file', 'myImgUpload');
$file->setAttrib('name', 'myImgUpload[]');

Кстати: в Zend_Form_Element::setName() метод Zend_Form_Element::filterName() снимите скобки

0 голосов
/ 11 января 2012

См http://zend -framework-community.634137.n4.nabble.com / Zend-Form-Element-имя-набор-allowBrackets-td679084.html

Итак, во-первых, имена не имеют внутренних скобок, чтобы будет работать множество других функций (прежде всего, перегрузка доступа).

Тем не менее, вы можете заставить скобки появляться в выводе в паре разных способов.

  • Если вы хотите, чтобы скобки позволяли захватывать несколько значений - то есть имя типа 'foo []' - включите свойство isArray:

    $element->setIsArray(true); // or pass a true value to the
                                // "isArray" key during
                                // instantiation
    
  • Если вы хотите, чтобы значение было ключом другого значения, например, "bar [foo]", тогда вам нужно сказать элементу, который принадлежит другому значение:

    $element->setBelongsTo('bar'); // or pass the value to the
                                   // 'belongsTo' key during
                                   // instantiation
    
  • Если вы используете подформы, запись массива происходит по умолчанию; все элементы "ownTo" в имени подформы

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...