我想知道如何实现允许用户在相关模型中输入多个(未知)记录的视图。
例如,我有两个模型,称为组和用户。我想实现一个视图,允许我创建一个组(这很容易),并在同一个视图中让我创建多个属于该组的用户。
我希望我的问题很清楚,如果不只是让我知道..
我想知道如何实现允许用户在相关模型中输入多个(未知)记录的视图。
例如,我有两个模型,称为组和用户。我想实现一个视图,允许我创建一个组(这很容易),并在同一个视图中让我创建多个属于该组的用户。
我希望我的问题很清楚,如果不只是让我知道..
在后端,使用 saveAll($data),准备您的数据,例如:
// Prepare the data for the Group hasMany User
$data = array('Group' => array(
'id' => 5,
'name' => 'my group',
'User' => array(
array('id'=>1,'username' => 'john'),
array('id'=>2,'username' => 'pachelbel'))
)
)
// OR if it's being passed in, just use $this->data in place of $data
// Save all the data
$this->Group->saveAll($data)
在视图中,您要准备表单,使其具有正确排列的键:
<form id="GroupCreateForm" method="post" action="/groups/create">
<input type="hidden" name="data[Group][id]" value="5" />
<input type="hidden" name="data[Group][name]" value="my group" />
<input type="hidden" name="data[Group][User][0][id]" value="1" />
<input type="hidden" name="data[Group][User][0][username]" value="john" />
<input type="hidden" name="data[Group][User][1][id]" value="2" />
<input type="hidden" name="data[Group][User][1][username]" value="pachelbel" />
</form>
如果您想动态地将用户添加到表单中,请考虑使用 javascript 来注入新input
元素。
有关更多信息,请参阅此内容。
你可以使用 Cake 的 Form helper 来做的更聪明。在上面的示例中,您可以这样重写:
<?php
echo $this->Form->Create('Group');
echo $this->Form->input('Group.id');
echo $this->Form->input('Group.name');
for($i=0;$i<10;$i++){
$this->Form->input('User.'.$i.'.id');
$this->Form->input('User.'.$i.'.name');
}
?>
通过这种方式,您可以从自动错误处理以及字段值填充中受益。