【问题标题】:CakePHP - Ignore form Input Field with Name AttributeCakePHP - 忽略具有名称属性的表单输入字段
【发布时间】:2017-11-15 16:44:14
【问题描述】:

我有一个带有单选按钮的 CakePHP 表单,它通过打开和关闭表单部分来增强前端。为了使单选按钮工作,我需要一个将它们绑定在一起的名称属性。

但是,我的问题是 CakePHP 会发布带有 name 属性的任何输入字段,因此上面的单选按钮在提交表单时会导致错误,因为我的模型中没有 toggle-0 字段。

有没有办法阻止 CakePHP 发布单选按钮的值?我可以在前端或后端实现这一点吗?

这似乎是一件非常简单的事情(就像在 C# MVC 中一样),但我似乎在 Cake Cookbook 上找不到任何信息。

相关单选按钮:

<input id="toggle-on-0" class="selection-toggle selection-toggle-left" name="toggle-0" value="false" type="radio">
<label for="toggle-on-0" class="selection-btn">On</label>
<input id="toggle-off-0" class="selection-toggle selection-toggle-right" name="toggle-0" value="true" type="radio">
<label for="toggle-off-0" class="selection-btn">Off</label>

如果我能澄清问题,或者您是否需要我的 add() 方法的代码,请告诉我。

【问题讨论】:

    标签: php html cakephp cakephp-3.0


    【解决方案1】:

    这不是 CakePHP 的问题。通过同时使用 value 和 name 属性,您已将收音机设为 control successful。正如 HTML 规范中提到的,单选输入现在将成为表单数据的一部分,并将发送到表单提交的操作。

    解决方案:

    1:您在服务器端的唯一解决方案是从请求对象中删除无线电输入数据(如果存在)。

    2:删除 name 属性并更改您的前端逻辑。

    3:发送仅包含所需 POST 数据的 AJAX 请求。

    【讨论】:

    • 感谢您的回复。第一个似乎是最好的解决方案,尽管我首先相信验证器上的 POST 错误。当我得到它的工作时,我会实施并接受你的答案。
    • 我已经设法使用$this-&gt;Form-&gt;unlockField('toggle-0'); 来防止验证错误。然后,我完全在控制器中从$_POST 中删除这些字段 - 所以(1)起作用了。
    猜你喜欢
    • 1970-01-01
    • 2017-11-06
    • 2015-08-12
    • 1970-01-01
    • 2011-01-18
    • 2011-01-13
    • 2016-06-02
    • 1970-01-01
    • 2022-11-02
    相关资源
    最近更新 更多