2010-04-11 46 views
2

对于那些早些时候可能已经读过这些内容的读者,我已经做了一些研究并完全修改了我的问题。我一直有一个问题,我的表单请求被安全组件篡改,尽管当安全组件被禁用时一切正常。我已经追查到的形式单行:CakePHP 1.26:'安全'组件中的错误?

<?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团队。我也很想知道我是否在愚蠢,错过了一些明显的东西。

(抱歉在这里讨论的意见,但我没有在留言给他们足够的空间)

UPDATE:谢谢洁圣,你约100%正确的 - “的输入值会禁用时不提交“。我甚至在the official HTML spec上看到它,它说,“[禁用的元素]不能接收用户输入,也不会将其值与表单一起提交”。但蛋糕IS提交值的形式!当我禁用安全组件时,我可以查看随表单提交的POST数据,果然,“所有者”字段已提交!不幸的是,这正是我想要的行为,但它似乎与官方的HTML规范不一致......所以我认为这是一个标准表单助手的错误。我会把这个报告给CakePHP团队作为一个错误,但我很乐意听到任何可以证实或驳斥这一点的人。另外,Jesh,你使用安全密钥并将其设置为false的想法很好,但我真的不想要离开这个领域不安全(事实上,我特别不想离开这个领域不安全),在我看来,我不应该这样做。实际上,现在我认为这也可能是安全组件中的一个错误;我是使用 FormHelper在这里创建我的表单 - 所以不应该安全组件能够处理这?

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

回答

1

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

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

1

添加到你的beforeFilter()这样的:

$这 - >安全 - > disabledFields =阵列( '拥有者');

0

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