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

时间:2010-07-20 23:17:44

标签: 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.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。

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

2 个答案:

答案 0 :(得分:3)

试试这段代码:

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 vars是否来自浏览器。

如果$ _POST数组为空,那么问题可能在错误的请求标头中,要检查一下,试试这个:

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

修改

也许你可以在$.post not POSTing anything找到答案。

E.g。你应该检查所有的JS变量是不是空的。

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

答案 1 :(得分:1)

响应Sergiy,根据jQuery文档(http://api.jquery.com/jQuery.ajax),任何jQuery ajax请求的默认设置是application / x-www-form-urlencoded和UTF-8。 $ .post只是一个快捷方式,它将ajax'type'设置为'POST'。

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