CakePHP动态表单输入

时间:2015-08-31 20:33:21

标签: javascript php jquery cakephp

我正在使用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

1 个答案:

答案 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; ?>