我希望在SecurityComponent
处于活动状态时在CakePHP中创建一个表单。到目前为止一切都那么好,现在我想添加自定义input
元素,我无法使用FormHelper
生成这些元素。但是,我确实将这些字段包含在安全性和验证检查中。
主要问题是我无法在标签之外渲染单选按钮。所以我自己就这样渲染它们:
<div class="radio radio-inline">
<input id="genderMALE" type="radio" name="data[User][gender]" value="MALE"/>
<label for="genderMALE">Male</label>
</div>
<div class="radio radio-inline">
<input id="genderFEMALE" type="radio" name="data[User][gender]" value="FEMALE"/>
<label for="genderFEMALE">Female</label>
</div>
这本身就很完美。然而FormHelper
没有注意到它们,因此SecurityComponent
将此注册为篡改表单。黑名单我的请求。
我尝试使用FormHelper
生成输入,但无线电支持有限。 format
选项在此处不起作用:
单选按钮不能使用这些设置控制输入和标签元素的顺序。 - Cookbook
接下来,我找不到任何方法来渲染一个普通的独立单选按钮。我发现接受input
的唯一方法是在SecurityComponent
中忽略它。
Cake的解决方法是什么?
更新14-09 09:16
我目前的修复/黑客将是用纯HTML创建自定义单选按钮,如上所示。然后将这些无线电输入的值链接到使用FormHelper
创建的输入字段。使用CSS我可以隐藏此输入,允许通过JavaScript更改它,而不是使用type="hidden"
。
使用此方法可能会出现任何危险/问题吗?
旁注:最后这是造型问题。然而,我被迫使用Bootstrap并且还有2天时间来完成我的任务。而且我不想在编写自定义CSS / JS的道路上努力实现这一目标。
答案 0 :(得分:0)
在获取黑客解决方案的内容时,我偶然发现了FormHelper::$fields
字段。此字段会跟踪使用FormHelper
创建的所有输入,后来由SecurityComponent
用于检查表单是否已被篡改。
解决方案确实需要一些额外的工作,因为您需要实现以下步骤:
fields
数组工作CTP
<div class="radio radio-inline">
<input id="genderMALE" type="radio" name="data[User][gender]" value="MALE"
<?= $this->request->data('User.gender') == 'MALE' ? 'checked' : ''?> />
<label for="genderMALE">Male</label>
</div>
<div class="radio radio-inline">
<input id="genderFEMALE" type="radio" name="data[User][gender]" value="FEMALE"
<?= $this->request->data('User.gender') == 'FEMALE' ? 'checked' : ''?> />
<label for="genderFEMALE">Female</label>
</div>
<input type="radio" name="data[User][gender]" value="" class="hidden"
<?= $this->request->data('User.gender') ? '' : 'checked'?> />
<?php $this->Form->fields[] = 'User.gender' ?>
它远非漂亮,但我认为它接近于蛋糕本身的内部。可能希望创建一个帮助程序,而不是每次都手动实现输入。