【问题标题】:Yii : What can block access to $_POST data?Yii:什么可以阻止访问 $_POST 数据?
【发布时间】:2012-12-18 10:38:03
【问题描述】:

我正在向控制器/操作(不是 ajax)发送帖子。

在操作内部,我正在执行检查它是否是帖子的标准方法(确切的方法适用于我正在使用的其他操作)。

if( isset( $_POST['LessonForm'] ) )
{
 ...
}
else
{
   Yii::trace( "Post Not Set" );        
}

而且帖子始终没有设置。

但是,如果我在条件句前面加上var_dump( $_POST ); die();,我会得到:

array(2) { ["LessonForm"]=> array(3) { ["title"]=> string(4) "test" ["shortDescription"]=> string(4) "test" ["image"]=> string(0) "" } ["yt1"]=> string(0) "" }

所以帖子显然在那里。此外,

foreach( $_POST as $key => $value )
{
    echo( $key.'<br>' );
}

我明白了:

LessonForm
yt1

进一步表明该帖子在那里。

尝试在 $_POST 中使用变量时,它不存在。如果在 foreach 循环中访问它并将其分配给变量,我可以 vardump 变量但不使用它。

为了测试是否是 accessControl 问题,我删除了所有过滤器。

什么可以像这样阻止访问?

更新:

@Stu 是正确的,因为它不是作为 POST 发送的。表单方法是post。不知道还有什么方法可以强制发帖?

更新 2:

问题已解决,但我仍然不确定是什么导致 CActiveForm 发送 get 而不是 post 并且仍然包含 post 数据。

从模型保存中删除事务后,问题消失了(它本来不应该存在的)。

更新 3:

最初的问题是 actionCreate。这个问题神秘地消失了。接下来是一个动作编辑。呈现的视图(带有表单)是同一个文件。该操作被复制并粘贴,并修改了数据的保存方式和获取模型,而不是创建新模型。

查看网络流量后,有一个帖子紧跟在我的代码中没有的 302 重定向。出于某种原因,Yii 强制执行 302 重定向以执行操作。

【问题讨论】:

  • 你试过if(Yii::app()-&gt;request-&gt;isPostRequest){ }吗?
  • 我不完全确定,但 array(2) 不应该是 array(1) 吗?这意味着它在另一个内部,这就是为什么没有设置在第一级数组中。
  • @Stu 你正在做某事。 if(Yii::app()-&gt;request-&gt;isPostRequest){ } 暗示这不是一个帖子。但是,form 方法是 post。深入挖掘。
  • @jcalonso array(2) 只是说它是一个有两个节点的数组,在这种情况下是LessonFormyt1
  • 嗯...您可以编辑您的问题,添加您的整个表单和控制器操作吗?

标签: post yii controls


【解决方案1】:

Yii 已经抽象出了获取请求变量,无论它们是 POST 还是 GET

使用:Yii::app()-&gt;request-&gt;getParam('SomeVarName', 'ADefaultValue');

获取请求变量并在不存在时返回合理的默认值。如果您一开始就无法从表单中发送变量,那可能是另一个问题。

【讨论】:

    猜你喜欢
    • 2022-12-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多