Zend framework Zend#u元素的奇怪行为';属于';财产
我见过其他线程和bug报告与Zend_元素的belongsTo属性有关,但与我的体验没有直接关系 这是我的(简化)Zend_表格:Zend framework Zend#u元素的奇怪行为';属于';财产,zend-framework,zend-form,Zend Framework,Zend Form,我见过其他线程和bug报告与Zend_元素的belongsTo属性有关,但与我的体验没有直接关系 这是我的(简化)Zend_表格: $form = new Zend_Form(); $form->addElement('text', 'fname', array('belongsTo' => 'user')); $form->addElement('text', 'sname', array('belongsTo' => 'user')); 这很好,元素渲染如下: &
$form = new Zend_Form();
$form->addElement('text', 'fname', array('belongsTo' => 'user'));
$form->addElement('text', 'sname', array('belongsTo' => 'user'));
这很好,元素渲染如下:
<input type="text" name="user[fname]" />
<input type="text" name="user[sname]" />
不,如果你打电话
$form->getValue('user');
当调用$form->getValues('user')时,我希望看到的是一个值数组。
如果调用
$form->getValue('fname') or $form->getValue('sname')
$form->getValues();
如果这是预期的行为,那么将它们放入数组有什么意义?因为“user[fname]”和“client[fname]”之间没有区别——事实上,添加另一个名为“fname”的元素,即使它属于另一个项目,也会覆盖上一个项目
我已经尝试添加一个子表单,它确实会产生我想要的结果,但这样所有子表单元素都会一起渲染,我真正想要的是将“数组”元素放置在随机的位置,就像这样
<input type="text" name="user[fname]" />
<input type="text" name="some-other-field" />
<input type="text" name="some-other-field2" />
<input type="text" name="user[sname]" />
<input type="text" name="another-field-too" />
这样做是因为getValue()只是查找元素的名称,而元素的名称是fname和sname
从我所看到的内容中访问您的个人数据的方法应该是:
$data = $form->getValues();
$user=$data['user'];
这应该是你想要的。基于此:
Excerpt: Zend/Form.php
public function getValues($suppressArrayNotation = false)
{
$values = array();
$eBelongTo = null;
if ($this->isArray()) {
$eBelongTo = $this->getElementsBelongTo();
}
foreach ($this->getElements() as $key => $element) {
if (!$element->getIgnore()) {
$merge = array();
if (($belongsTo = $element->getBelongsTo()) !== $eBelongTo) {
if ('' !== (string)$belongsTo) {
$key = $belongsTo . '[' . $key . ']';
}
}
$merge = $this->_attachToArray($element->getValue(), $key);
$values = $this->_array_replace_recursive($values, $merge);
}
}
//...Code continues
return $values;
希望这能有所帮助。Hi RockyFord-谢谢你的建议,但还是没有意义-设置一个belongs应该将元素设置为指定它所属的元素的子(或子表单)。否则,如果它只是将其创建为单个元素,那么将belongsTo设置为没有意义。这取决于您的观点。getValue($key)用于返回单个元素的值,而不考虑任何其他设置。getValues()提供了一种将数据集的所有值作为数组返回的方法。ZF的酷之处在于,如果你不同意他们的选择,就改变他们。扩展Zend/Form并用自己的函数重写getValue()。
$data = $form->getValues();
$user=$data['user'];
Excerpt: Zend/Form.php
public function getValues($suppressArrayNotation = false)
{
$values = array();
$eBelongTo = null;
if ($this->isArray()) {
$eBelongTo = $this->getElementsBelongTo();
}
foreach ($this->getElements() as $key => $element) {
if (!$element->getIgnore()) {
$merge = array();
if (($belongsTo = $element->getBelongsTo()) !== $eBelongTo) {
if ('' !== (string)$belongsTo) {
$key = $belongsTo . '[' . $key . ']';
}
}
$merge = $this->_attachToArray($element->getValue(), $key);
$values = $this->_array_replace_recursive($values, $merge);
}
}
//...Code continues
return $values;