Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/226.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
如何访问symfony 1.4中actions.class.php中的POST参数?_Php_Jquery_Post_Symfony 1.4 - Fatal编程技术网

如何访问symfony 1.4中actions.class.php中的POST参数?

如何访问symfony 1.4中actions.class.php中的POST参数?,php,jquery,post,symfony-1.4,Php,Jquery,Post,Symfony 1.4,我对symfony还是相当陌生的,所以如果这是一个愚蠢的问题,我很抱歉。我正在使用symfony 1.4和Doctrine。我的同事编写了一个JavaScript,用于从客户端小部件向服务器生成报告: $j.post(serverpath, {widget_id:widget_id, user_id:user_id, object_id:object_id, action_type:action_type, text_value:stuff_to_report }); 我在routing.ym

我对symfony还是相当陌生的,所以如果这是一个愚蠢的问题,我很抱歉。我正在使用symfony 1.4和Doctrine。我的同事编写了一个JavaScript,用于从客户端小部件向服务器生成报告:

$j.post(serverpath, {widget_id:widget_id, user_id:user_id, object_id:object_id, action_type:action_type, text_value:stuff_to_report });
我在routing.yml中创建了一个路由以接收此请求:

widget_report:
  url: /widget/report/
  options: {model: ReportClass, type: object }
  param: {module: widget, action: reports}
  requirements:
    object_id: \d+
    user_id: \d+
    action_type: \d+
    sf_method: [post]
我在actions.class.php中创建了一个操作来处理请求:

  public function executeReports(sfWebRequest $request) {
    foreach($request->getParameterHolder()->getAll() as $param => $val) {
        // $param is the query string name, $val is its value
        $this->logMessage("executeReports: $param is $val");  
    }
    try {
      [...]
     $actionHistory->setUserId($request->getParameter('user_id', 1));
     $this->logMessage("executeReports success: ");  
    } catch {
      [...]
    }
  }
我的日志文件报告:

Jul 20 18:51:35 symfony [info] {widgetActions} Call "widgetActions->executeReports()"
Jul 20 18:51:35 symfony [info] {widgetActions} executeReports: module is widget
Jul 20 18:51:35 symfony [info] {widgetActions} executeReports: action is reports
Jul 20 18:51:35 symfony [info] {widgetActions} executeReports success: 
我一定是走错一步了。当然,当我们在URL中传递变量并在路由中指定变量时,我们就可以这样做了,但是出于各种原因,我们希望使用POST

为什么在actions.class.php中无法访问我的POST参数?

请尝试以下代码:

if ($request->isMethod('post')) {
    foreach($request->getPostParameters() as $param => $val) {
        $this->logMessage("executeReports: $param is $val");
    }
} else {
    $this->logMessage("executeReports: request method is not POST");
}
如果这没有帮助,请尝试:

$this->logMessage("executeReports: " . var_export($_POST, true));
或者启用symfony调试工具栏,查看POST变量是否来自浏览器

若$\u POST数组为空,则问题可能出在错误的请求头中,若要检查这一点,请尝试以下操作:

$fp = fopen('php://input','r');
$this->logMessage("executeReports: " . stream_get_contents($fp));
祝你好运

编辑:

也许你可以在这里找到答案

例如,您应该检查所有JS变量是否都为空

无论是哪种情况,我都建议您使用Firebug控制台查看哪些数据被发送到服务器。

请尝试以下代码:

if ($request->isMethod('post')) {
    foreach($request->getPostParameters() as $param => $val) {
        $this->logMessage("executeReports: $param is $val");
    }
} else {
    $this->logMessage("executeReports: request method is not POST");
}
如果这没有帮助,请尝试:

$this->logMessage("executeReports: " . var_export($_POST, true));
或者启用symfony调试工具栏,查看POST变量是否来自浏览器

若$\u POST数组为空,则问题可能出在错误的请求头中,若要检查这一点,请尝试以下操作:

$fp = fopen('php://input','r');
$this->logMessage("executeReports: " . stream_get_contents($fp));
祝你好运

编辑:

也许你可以在这里找到答案

例如,您应该检查所有JS变量是否都为空


在这两种情况下,我建议您使用Firebug控制台查看发送到服务器的数据。

根据jQuery文档,响应Sergiy,任何jQuery ajax请求的默认设置都是application/x-www-form-urlencoded和UTF-8。$。post只是一个快捷方式,它将ajax的“type”设置为“post”


是否可能是大小写不匹配,即POST与POST?

根据jQuery文档,任何jQuery ajax请求的默认设置都是application/x-www-form-urlencoded和UTF-8.$。post只是一个快捷方式,它将ajax的“type”设置为“post”


是否可能是案例不匹配,即POST与POST?

谢谢!JavaScript似乎没有发送有效的POST请求。Ajax POST请求的正确标头为:xhr.setRequestHeader'Content-Type',application/x-www-form-urlencoded;字符集=UTF-8';谢谢JavaScript似乎没有发送有效的POST请求。Ajax POST请求的正确标头为:xhr.setRequestHeader'Content-Type',application/x-www-form-urlencoded;字符集=UTF-8';