UnlockField在CakePHP中对数组不起作用

fnatzsnv  于 2022-11-11  发布在  PHP
关注(0)|答案(1)|浏览(127)

我有一个表单,它必须将一些元素作为数组的一部分进行处理。

echo $this->Form->control('config.sys_file_id', ['type' => 'number']);
echo $this->Form->control('click_enlarge', ['type' => 'checkbox']);
echo $this->Form->control('config.max_width', ['type' => 'number']);
echo $this->Form->control('config.max_height', ['type' => 'number']);
echo $this->Form->control('config.fixed_width', ['type' => 'number']);
echo $this->Form->control('config.fixed_height', ['type' => 'number']);

这将工作正常,除了我需要处理config.sys_file_id与一些JS。
我知道我必须调用$this->Form->unlockField(),但是当字段是数组的一部分时,我找不到正确的语法。

$this->Form->unlockField('sys_file_id');
$this->Form->unlockField('config');
$this->Form->unlockField('config.sys_file_id');
$this->Form->unlockField('config[sys_file_id]');

但是请求仍然会被SecurityComponent黑洞化。
我偶然发现了这两个问题How to 'unlock' a field in a CakePHP form when it is part of a hasMany associationUnlockField not working in CakePHP,但它们都很老,而且都是在我使用CakePHP 4时参考CakePHP 2的。

fkvaft9z

fkvaft9z1#

从检视解除锁定输入(当是数组时)的正确语法是使用点:

$this->Form->unlockField('config.sys_file_id');

https://api.cakephp.org/4.4/class-Cake.View.Helper.FormHelper.html#unlockField()
但是,请确保在$this->Form->create()$this->Form->end();之间使用$this->Form->unlockField()

echo $this->Form->create();

echo $this->Form->control('config.sys_file_id', ['type' => 'number']);
echo $this->Form->control('click_enlarge', ['type' => 'checkbox']);
echo $this->Form->control('config.max_width', ['type' => 'number']);
echo $this->Form->control('config.max_height', ['type' => 'number']);
echo $this->Form->control('config.fixed_width', ['type' => 'number']);
echo $this->Form->control('config.fixed_height', ['type' => 'number']);

// before form end
$this->Form->unlockField('config.sys_file_id');

echo $this->Form->end();

如果将$this->Form->unlockField('config.sys_file_id');放在end()create()之外,就会得到一个CakePHP异常:
尚未建立FormProtector执行严修。请确定您已在控制器中载入FormProtectionComponent,并在呼叫FormHelper::unlockField()之前呼叫FormHelper::create()。
我在CakePHP 4.4 Strawbery上测试了这段代码,它工作正常。
如果您的JAVASCRIPT代码错误地更改了其他字段,那么问题就出在这里。

相关问题