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

Cakephp 将禁用的下拉元素添加到INSERT语句中,cakephp,Cakephp,这是8年多以前的事了。现在,对于CakePHP 4.1.x,我想知道这个[恼人的]限制是否已经改变了,例如程序员可以指示CakePHP在INSERT语句中添加一个disabled字段。我在研究文件,但什么也没找到 我的意思是: 表user\u comments引用的是user\u id表users。user\u comments表单有一个用于user\u id的下拉控件,该控件提供用于选择的users.name条目 对于“添加”操作,可以通过分配用户表中的id值来轻松确定下拉列表中显示/预选的条

这是8年多以前的事了。现在,对于CakePHP 4.1.x,我想知道这个[恼人的]限制是否已经改变了,例如程序员可以指示CakePHP在
INSERT
语句中添加一个
disabled
字段。我在研究文件,但什么也没找到

我的意思是:

user\u comments
引用的是
user\u id
users
user\u comments
表单有一个用于
user\u id
的下拉控件,该控件提供用于选择的
users.name
条目

对于“添加”操作,可以通过分配
用户
表中的
id
值来轻松确定下拉列表中显示/预选的条目。这一切都是在
$This->Form->control()函数中完成的

但是必须更改下拉列表中用户id的预选值
而不是
插入
语句中显然需要该值

使下拉元素
只读
不是一个解决方案,因为它的选择仍然可以更改。确保下拉列表中所选项目无法更改的唯一方法是将其禁用。这就是问题所在,因为
INSERT
语句中不包含
禁用的
控件,
插入
失败,因为
用户id
字段不在
实体
中,并且
用户注释
表中需要它

我希望有人能理解我想表达的意思


我的问题:

CakePHP>=4.1是否提供了在
实体中包含
禁用的
字段的选项

浏览器是否有提交禁用的
字段的方法

更新:


如前所述,这与CakePHP无关,因此我更新了我的问题。

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

我有一个PHP脚本,可以动态生成50个表的个性化表单。在这个脚本中,我添加了下面的JQuery代码,该代码在单击
submit
按钮时执行。此代码将
disabled
属性设置为
false
——非常简单

显然,CakePHP将此字段添加到
实体
中就足够了。也许有一个更优雅的解决方案

更新

正如所指出的,是浏览器忽略了禁用的
元素。删除
disabled
属性可以让浏览器提交输入元素。它与CakePHP无关


以下代码的图例:

例如,
$foreignKey
具有值
user\u 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']);

撇开你所描述的问题的技术细节不谈,为什么你有一个用户选择字段,而它本来不应该用于选择一个(不同的)用户?你可以像链接答案中所描述的那样,使用一个隐藏字段作为所需的值,并单独显示名称。这是一个完美的解决方案。但所选用户id最初来自何处,为什么在第一次请求时服务器端可用,而在第二次请求时不可用?a)数据中未包含的禁用字段不是蛋糕,而是web浏览器;他们只是不发送那个字段。b) 使用大多数浏览器内置的现代开发工具,禁用的字段(和隐藏的字段!)的值仍然可以进行很小的更改。@GregSchmidt a)事实上,我没有意识到这一点。我找到了解释的地方。谢谢格雷格的提示!b) 当然可以。但这是一个web应用程序,适用于具有封闭用户组的公司,所有更改都会记录下来。如果一个员工应该是如此聪明的人,并试图使数据无效,他将被解雇,操作将被回滚。如果你的通用代码足够聪明,可以在这些字段上添加一个禁用标志,我不清楚为什么它不能也够聪明,可以为这些字段添加一个隐藏字段。那你就不需要JavaScript了。