我正在使用 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">
编辑
$key 的值已在/Elements/users.ctp 上正确设置。我可以创建一行并回显 $key 的输出,并且该行的数字正确显示。正如您在上面看到的,元素的名称设置正确,但 id 的设置仍然很奇怪。
正确设置了选择元素的名称,但未正确设置 id。
是什么导致选择 id 为 Role<%=Key%>UserId
而不是Role0UserId
?
最佳答案
问题:
如果您观察您发布的相关生成的选择标签,它会显示
<%=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; ?>
关于javascript - CakePHP 动态表单输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32319517/