将禁用的下拉元素添加到 INSERT 语句中

Adding disabled drop-down element into the INSERT statement

这个question已经8岁多了。 现在,有了 CakePHP 4.1.x,我想知道这个 [ 烦人的 ] 限制是否已经改变,例如程序员可以 指示 CakePHP 将disabled 字段添加到INSERT 语句中。我正在研究文档,但没有找到任何东西。

什么意思:

tableuser_comments指的是user_idtableusersuser_comments 表单有一个 user_id 的下拉控件,它 提供 users.name 个条目供选择。

对于“add”操作,下拉列表中的 shown/pre-selected 条目可以很容易地确定,将“default”选项分配给 id 值存在于 users table 中。这些都是在 $this->Form->control() 函数中完成的。

但是下拉列表中 user_id 的预选值必须 NOT 更改并且在 INSERT 声明中明确需要。

制作下拉元素 readonly 不是解决方案,因为它的选择仍然可以更改。确保下拉列表中的所选项目无法更改的唯一方法是将其设置为 disabled。这就是现在的问题,因为 disabled 控件未包含在 INSERT 语句中,并且 INSERT 失败,因为 user_id 字段不在 entity 并且 user_comments table.

中需要它

希望有人明白我想表达的意思


我的问题:

CakePHP >= 4.1 是否提供在 entity 中包含 disabled 字段的选项?

浏览器是否可以提交 disabled 字段?

更新:

正如 Greg 所指出的,这与 CakePHP 无关,所以我更新了我的问题。

目前我正在使用这种方法:

我有 一个 PHP 脚本,可以为 50 个表格即时生成个性化表格。在这个脚本中,我添加了下面的 JQuery 代码,当 submit 按钮被点击时,它会被执行。此代码将 disabled 属性 设置为 false - 就这么简单。

显然,CakePHP 将此字段添加到 entity 中就足够了。可能有更优雅的解决方案。

更新:

正如 Greg 所指出的,浏览器 忽略了 一个 disabled 元素。删除 disabled 属性 浏览器然后提交输入元素。与蛋糕无关PHP.


下面代码的图例:

例如,

$foreignKey - 参考我的问题 - 值 user_id。我在 $this->Form->create() 函数中使用 $formId 设置了表单 id 标记,因为我需要 JQuery。此代码位于创建表单的 PHP 脚本的末尾。

$dasherize = Inflector::dasherize($foreignKey);
$submitInjection = "$('#{$formId}').submit( function() {
    $('#{$dasherize}').prop('disabled', false);
});
";

echo $this->Html->scriptBlock($submitInjection, ['block' => 'script']);