2

对于那些之前可能读过这篇文章的人,我做了一些研究并彻底修改了我的问题。我一直遇到一个问题,即我的表单请求被安全组件阻塞,尽管在禁用安全组件时一切正常。我已经将其追溯到表格中的一行:

<?php echo $form->create('Audition');?>
    <fieldset>
        <legend><?php __('Edit Audition');?></legend>
    <?php
        echo $form->input('ensemble');
        echo $form->input('position');
        echo $form->input('aud_date');
        // The following line works fine...
       echo $form->input('owner');  
       // ...but the following line blackholes when Security included
        // and the form is submitted:
        // echo $form->input('owner', array('disabled'=>'disabled');
    ?>
    </fieldset>
<?php echo $form->end('Submit');?>

(为了清楚起见,我已经注释掉了违规行)我认为我通过使用表单助手来遵守规则;据我所知,这是安全组件中的一个错误,但我对 CakePHP n00b 太了解了,无法确定。我很想得到一些反馈,如果它是一个真正的错误,我会将它提交给 CakePHP 团队。我也很想知道我是否只是愚蠢并在这里遗漏了一些明显的东西。

(很抱歉在这里发表评论,但我没有足够的空间给他们评论)

更新:谢谢 Jesh,你 100% 正确——“禁用时不会提交输入值”。我什至在官方 HTML 规范中查找了它,其中说:“[A disabled element] 无法接收用户输入,其值也不会与表单一起提交”。但是 Cake正在用表单提交值!当我禁用安全组件时,我可以查看与表单一起提交的 POST 数据,果然,“所有者”字段已提交!不幸的是,这正是我想要的行为,但它似乎与官方 HTML 规范不一致......所以我认为这是标准表单助手的错误。我会将此作为错误报告给 CakePHP 团队,但我

另外,Jesh,您使用安全密钥并将其设置为 false 的想法效果很好,但我真的不想让这个字段不安全(事实上,我特别不想让这个字段不安全),而且它在我看来,我不应该这样做。事实上,现在我认为这也可能是安全组件中的一个错误;我正在使用FormHelper 在这里创建我的表单——所以安全组件不应该能够处理这个吗?

@Miles:您的解决方案也很好用——谢谢!但它仍然留下了我在上面提出的相同问题。

4

3 回答 3

1

好吧,禁用时不会提交输入值。但是由于您使用 Cakephp 的 FormHelper 输出字段,SecurityComponent 期望输入值必须列在Controller->data数组中,否则它会黑洞您的请求。

尝试secure在表单选项数组中添加键并将其设置为false.

于 2010-04-11T14:32:38.083 回答
1

将此添加到您的 beforeFilter() 中:

$this->Security->disabledFields = array('owner');

于 2010-04-13T04:25:01.383 回答
0

您可以在表单中使用readonly而不是。disabled这对我行得通。Disabled是故意的黑洞。

于 2010-07-08T15:31:36.873 回答