我在另一个字段集 Ill 中有一个嵌套的fieldset集合 item ,我试图为其设置元素变量。我可以成功设置 Ill 字段集的元素,但无法在集合中生成或 item 字段集。
我对此示例的布局非常相似:https://framework.zend.com/manual/2.0/en/modules/zend.form.collections.html
嵌套表格的布局是:
ILLForm(表格) - >生病(FieldSet中) - >项目(类别/字段集)
(Ill可以有许多项目字段集)
这是Indexcontroller:
$ill = new Ill('ill', $this->ILLCategories, $this->campuses, $this->getFromOptions);
$ill->setName($session->name);
$ill->setEmail($session->email);
$item_array = array();
if ( isset($session->department))
{
$ill->setDepartment($session->department);
$ill->setDivision($session->division);
if ( isset($session->formData->items))
{
$item_iterator = $session->formData->items;
$i = -1;
foreach ( $item_iterator as $item)
{
$i++;
$item_fieldset = new Item('Item '.($i+1), $this->ILLCategories, $this->getFromOptions);
$item_fieldset->setILLType($item->ILLType);
$item_fieldset->setGetFrom($item->getFrom);
$item_array[] = $item_fieldset;
}
}
else
{
$item_fieldset = new Item('Item 1', $this->ILLCategories, $this->getFromOptions);
$item_array[] = $item_fieldset;
}
}
else
{
$item_fieldset = new Item('Item 1', $this->ILLCategories, $this->getFromOptions);
$item_array[] = $item_fieldset;
}
$ill->items = $item_array;
$this->ILLForm->bind( $ill );
当我在视图控制器中查看结果时,不会显示任何项目。以下是我尝试绑定到fieldsets的数据示例:
object(ILL\Entity\Ill)[452]
protected 'name' => string 'Test' (length=4)
protected 'email' => string 'yay@yay.com' (length=11)
protected 'division' => string 'Test' (length=4)
protected 'department' => string 'Test' (length=4)
protected 'contact' => null
protected 'phone' => null
protected 'idNumber' => null
protected 'campus' => null
public 'item' =>
array (size=1)
0 =>
object(ILL\Entity\Item)[453]
private 'ILLType' => null
private 'requiredBy' => null
private 'urgent' => null
private 'citation' => null
private 'copyright' => null
private 'getFrom' => null
这可能是一件简单的事情,我在构建数据的过程中忽略了这一点,但却让我望而却步。
答案 0 :(得分:0)
好的,似乎 bind()函数不会设置嵌套的fieldset集合(但会执行其他所有操作)。
还有另一个没有此问题的功能,名为 setData()。我基本上改变了这部分代码:
$this->ILLForm->bind( $ill );
到此:
// If previously submitted then run the validation to generate messages, otherwise bind autogenerated data to form (username etc...)
if ( isset($session->formData))
{
$this->ILLForm->setData($session->formData);
$this->ILLForm->isValid($ill);
}
else
{
$this->ILLForm->bind($ill);
}
根据代码中的注释,如果存在会话集,则通过 setData()函数将数据推送到字段中(然后进行验证)。 如果是新加载,则模型通过 bind()函数绑定到字段。