我正在使用CakePHP 2.3.8而我正在尝试创建一个动态添加来自this tutorial的输入的表单,但我遇到了一些问题。添加和删除输入工作正常,但当我提交表单时,我收到黑洞错误消息。在检查输入时,看起来好像没有正确设置键值并导致输入id的某些问题。
例如,将此代码放在元素
中//Elements/users.ctp
$key = isset($key) ? $key : '<%= key %>';
<tr>
<td><?php echo $this->Form->input("Role.{$key}.user_id", array('options' => $users, 'label' => false)); ?></td>
<td class="actions">
<a href="#" class="remove">Remove User</a>
</td>
</tr>
这是生成的选择
<select name="data[Role][0][user_id]" id="Role<%=Key%>UserId">
修改
正在/Elements/users.ctp上正确设置$ key的值。我可以创建一个行并回显$ key的输出,并且该行的数字正确显示。正如您在上面所看到的,元素的名称设置正确,但id仍然设置得很奇怪。
正确设置了select元素的名称,但没有设置id。
是什么导致选择ID为Role<%=Key%>UserId
而不是Role0UserId
?
答案 0 :(得分:2)
问题:
如果您观察到您发布的生成的选择标记,则会显示
<%=Key%>
您正在使用的教程使用的下划线库所期望的变量是
<%= key %>
CakePHP表单输入正在替换该下划线变量的html字符和空格,因此下划线库无法检测到它。
解决方案:
要解决此问题,您必须使用纯HTML代码作为模板部分。您的grades.ctp必须如下所示(部分代码用于理解)
<?php if (isset($key)) : ?>
<tr>
<td>
<?php echo $this->Form->input("Grade.{$key}.id") ?>
<?php echo $this->Form->input("Grade.{$key}.subject", array('label' => false)); ?>
</td>
</tr>
...rest of the code
<?php else: ?>
<tr>
<td>
<input type="hidden" id="Grade<%= key %>Id" name="data[Grade][<%= key %>][id]">
<div class="input text required">
<input type="text" required="required" id="Grade<%= key %>Subject" maxlength="200" name="data[Grade][<%= key %>][subject]">
</div>
</td>
...rest of the code
</tr>
<?php endif; ?>