Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/275.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/extjs/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用SecurityComponent在CakePHP 2中创建手动输入?_Php_Cakephp 2.0 - Fatal编程技术网

如何使用SecurityComponent在CakePHP 2中创建手动输入?

如何使用SecurityComponent在CakePHP 2中创建手动输入?,php,cakephp-2.0,Php,Cakephp 2.0,我想在激活SecurityComponent的同时在CakePHP中创建一个表单。到目前为止还不错,现在我想添加使用FormHelper无法生成的自定义input元素。但是,我不希望在安全和验证检查中包含这些字段 主要的问题是我不能渲染标签外的单选按钮。因此,我自己将它们呈现为: <div class="radio radio-inline"> <input id="genderMALE" type="radio" name="data[User][gender]" v

我想在激活
SecurityComponent
的同时在CakePHP中创建一个表单。到目前为止还不错,现在我想添加使用
FormHelper
无法生成的自定义
input
元素。但是,我不希望在安全和验证检查中包含这些字段

主要的问题是我不能渲染标签外的单选按钮。因此,我自己将它们呈现为:

<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
生成输入,但无线电支持有限。
格式
选项在此不起作用,因为:

单选按钮不能使用这些设置控制输入和标签元素的顺序。 --

其次,我找不到任何方法来渲染一个简单的分离单选按钮。我发现接受
输入的唯一方法是在
SecurityComponent
中忽略它

解决这个问题的方法是什么

更新14-09 09:16
我目前的修复方法是用纯HTML创建自定义单选按钮,如上图所示。然后将这些无线电输入的值链接到使用
FormHelper
创建的输入字段。使用CSS,我可以隐藏这个输入,允许JavaScript更改它,而不是使用
type=“hidden”

使用此方法是否会出现任何危险/问题


旁注:最终这是一个样式问题。然而,我不得不使用Bootstrap,只剩下2天的时间来完成我的任务。我不想走上编写自定义CSS/JS的道路来实现这一点。

在使用黑客解决方案获取内容时,我偶然发现了
FormHelper::$fields
字段。此字段跟踪使用
FormHelper
创建的所有输入,然后由
SecurityComponent
用于检查表单是否被篡改

解决方案确实需要一些额外的工作,因为您需要执行以下步骤:

  • 字段
    数组中添加自定义表单元素
  • 从上一次提交还原值(如果重定向回表单)
  • 添加默认选项,这样字段就不会从post数据中被忽略
  • 工作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' ?>
    
    
    />
    男性
    />
    女性
    />
    
    它一点也不漂亮,但我发现它很接近蛋糕本身的内部结构。可能希望创建一个助手,而不是每次都手动实现输入