我有一个表单,它必须将一些元素作为数组的一部分进行处理。
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 association和UnlockField not working in CakePHP,但它们都很老,而且都是在我使用CakePHP 4时参考CakePHP 2的。
1条答案
按热度按时间fkvaft9z1#
从检视解除锁定输入(当是数组时)的正确语法是使用点:
https://api.cakephp.org/4.4/class-Cake.View.Helper.FormHelper.html#unlockField()
但是,请确保在
$this->Form->create()
和$this->Form->end();
之间使用$this->Form->unlockField()
:如果将
$this->Form->unlockField('config.sys_file_id');
放在end()
或create()
之外,就会得到一个CakePHP异常:尚未建立FormProtector执行严修。请确定您已在控制器中载入FormProtectionComponent,并在呼叫FormHelper::unlockField()之前呼叫FormHelper::create()。
我在CakePHP 4.4 Strawbery上测试了这段代码,它工作正常。
如果您的JAVASCRIPT代码错误地更改了其他字段,那么问题就出在这里。