我想创建一个表格,其中每行都有一个带有复选框的数组。因此,用户可以选择将在控制器中处理的行。
因此,我创建了表单和数组。数组的每一行都有Task Element
的名称和一个复选框来选择它:
<h3><?= __('Task Elements') ?></h3>
<?php echo $this->Form->create('AddElement', ['url'=>['action' => 'add',$tasktypeid]]); ?>
<table cellpadding="0" cellspacing="0">
<thead>
<tr>
<th scope="col"><?= $this->Paginator->sort('id') ?></th>
<th scope="col"><?= $this->Paginator->sort('name') ?></th>
<th scope="col"><?= $this->Paginator->sort('element_category_id') ?></th>
</tr>
</thead>
<tbody>
<?php foreach ($taskElements as $taskElement): ?>
<tr>
<td><?= $this->Number->format($taskElement->id) ?></td>
<?= $this->Form->hidden('id',['value' => $taskElement->id]); ?>
<td><?= $this->Form->control(h($taskElement->name), ['type' => 'checkbox']);?></td>
<td><?= $taskElement->element_category_id != 0 ? $this->Html->link($taskElement->element_category->name, ['controller' => 'ElementCategories', 'action' => 'view', $taskElement->element_category->id]) : '' ?></td>
</tr>
<?php endforeach; ?>
</tbody>
</table><?php
echo $this->Form->submit('Add');
echo $this->Form->end();?>
但是在控制器debug($this->request->getData());
中返回以下内容:
[
'id' => '32',
'Library_Element' => '0',
'Library_Element_2' => '0'
]
这是不正确的,因为'Library_Element'id是27而不是32。因此它应该返回2行的数组而不是1行3列的数组。
这是我希望收到的正确数组:
Array
(
[0] => Array
(
[id] => 27
[Library_Element] => '0'
)
[1] => Array
(
[id] => 32
[Library_Element_2] => '0'
)
)
或者理想情况下,我想获得一个像这样的数组:
Array
(
[0] => Array
(
[id] => 27
[name] => 'Library Element'
[checked] => '0'
)
[1] => Array
(
[id] => 32
[name] => 'Library Element 2'
[checked] => '0'
)
)
该如何解决?然后在控制器中,我要迭代POST数据,并检查是否检查了每一行。如何正确迭代数据?
答案 0 :(得分:1)
您面临的问题是,当您的Web应用POST
进入后端时,它将仅发送“表单”数据。
这意味着无论您需要发送回什么数据,都需要使用表单元素(例如:输入,选择,隐藏等)将其包含在html form
标签中。在Cakephp模板中,您将使用Form
帮助器来打印出这些元素。
在这种具体情况下,您将创建一个隐藏的id
元素和一个复选框元素。复选框元素的值来自是否经过检查的事实,并且该值是1或0 ...从您的经验来看,这似乎是正确的。
请告诉我们您需要如何使用POST
格式的数据,以便我们提供更好的答案。
关于物联网的一些通用建议:
POST
将哪些数据存储到后端编辑:
将表单绑定到实体时,需要将该实体作为$this->Form->create($entity, ...)
调用的第一个参数提供。在您的情况下,您提供的是字符串,而不是实体。
看看用于将相关数据保存为以下格式的文档:https://book.cakephp.org/3.0/en/views/helpers/form.html#creating-inputs-for-associated-data
<tbody>
<?php foreach ($taskElements as $id => $taskElement): ?>
<tr>
<td><?= $this->Number->format($taskElement->id) ?></td>
<?= $this->Form->hidden("task.$id.id",['value' => $taskElement->id]); ?>
<?= $this->Form->hidden("task.$id.name",['value' => $taskElement->name]); ?>
<td><?= $this->Form->control("task.$id.checked", ['type' => 'checkbox']);?></td>
<td><?= $taskElement->element_category_id != 0 ? $this->Html->link($taskElement->element_category->name, ['controller' => 'ElementCategories', 'action' => 'view', $taskElement->element_category->id]) : '' ?></td>
</tr>
<?php endforeach; ?>
</tbody>