如何在Zend_Form中添加'[]'来形成元素名称?

时间:2011-06-12 12:52:11

标签: php zend-framework forms

我正在创建像这样的表单元素

    $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 个答案:

答案 0 :(得分:2)

我读了2种解决方案,其中一种是setElementsBelongTo,另一种是setIsArray,但解决方案对我来说不舒服,为什么它们阻止括号我不理解。为什么为什么? 我认为一种方法是编辑过滤器功能以允许括号。

答案 1 :(得分:1)

答案 2 :(得分:1)

我认为它不仅仅支持zend形式:

Zend_Form_SubForm

like

$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="" />

答案 3 :(得分:0)

请参阅 http://zend-framework-community.634137.n4.nabble.com/Zend-Form-Element-set-name-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
    
  • 如果使用子表单,默认情况下会发生数组表示法;所有 元素“belongsTo”子表单的名称

答案 4 :(得分:0)

这对我有用

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

顺便说一句:在Zend_Form_Element::setName()中,方法Zend_Form_Element::filterName()删除括号