Как мне получить доступ к параметрам POST в actions.class.php в symfony 1.4? - PullRequest
1 голос
/ 21 июля 2010

Я все еще довольно новичок в 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 ]

3 голосов
/ 21 июля 2010

Попробуйте этот код:

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 из браузера.

Если массив $ _POST пуст, проблема может быть в неправильных заголовках запроса, для проверки попробуйте это:

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

Удачи!

РЕДАКТИРОВАТЬ:

Может быть, вы можете найти ответ здесь $. Сообщение не отправляет ничего .

Например, вам следует проверить, не все ли переменные JS не пусты.

В любом случае, я бы порекомендовал вам использовать консоль Firebug, чтобы посмотреть, какие данные отправляются на сервер.

1 голос
/ 21 июля 2010

В ответ на вопрос Сергея, согласно документации jQuery (http://api.jquery.com/jQuery.ajax),, для любого запроса jjuery ajax по умолчанию заданы application / x-www-form-urlencoded и UTF-8. $ .Post просто является ярлыком, который устанавливает ajax 'type' в 'POST'.

Может ли это быть несоответствие регистра, то есть POST vs post?

...