1

PHP cURL と Symfony 1.4.2 の使用

REST Web サービスでオブジェクトを変更するためにデータ (JSON) を含む PUT 要求を実行しようとしていますが、サーバー側でデータをキャッチできません。

ログを確認すると、コンテンツが正常に添付されているようです。

PUT to http://localhost:8080/apiapp_test.php/v1/reports/498 with post body content=%7B%22report%22%3A%7B%22title%22%3A%22The+title+has+been+updated%22%7D%7D

次のようにデータを添付しました。

$curl_opts = array(
    CURLOPT_HTTPHEADER => $headers,
    CURLOPT_POSTFIELDS => http_build_query(array('content' => $post_data)),
);

そして、このようなものを使用してデータを取得したかった

$payload = $request->getPostParameter('content');

動作していないため、アクション ファイルでこのデータを取得するために多くの方法を試しました。私は次の解決策を試しました:

parse_str(file_get_contents("php://input"), $post_vars);
$payload = $post_vars['content'];
// or
$data = $request->getContent(); // $request => sfWebRequest
$payload = $data['content'];
// or
$payload = $request->getPostParameter('content');

// then I'd like to do that
$json_array = json_decode($payload, true);

アクションでこのデータを取得する方法がわからず、イライラします。ここでそれについて多くのトピックを読みましたが、どれもうまくいきません。

追加情報:

私は私のcURLリクエストのためにこれらのセットアップを持っています:

curl_setopt($curl_request, CURLOPT_CUSTOMREQUEST, $http_method);

if ($http_method === sfRequest::PUT) {
    curl_setopt($curl_request, CURLOPT_PUT, true);
    $content_length = array_key_exists(CURLOPT_POSTFIELDS, $curl_options) ? strlen($curl_options[CURLOPT_POSTFIELDS]) : 0;
    $curl_options[CURLOPT_HTTPHEADER][] = 'Content-Length: ' . $content_length;
}

curl_setopt($curl_request, CURLOPT_URL, $url);
curl_setopt($curl_request, CURLOPT_CONNECTTIMEOUT, 4);
curl_setopt($curl_request, CURLOPT_TIMEOUT, 4);
curl_setopt($curl_request, CURLOPT_DNS_CACHE_TIMEOUT, 0);
curl_setopt($curl_request, CURLOPT_NOSIGNAL, true);
curl_setopt($curl_request, CURLOPT_RETURNTRANSFER, true);

sfWebRequest.php で、私はこれを見ました:

case 'PUT':
  $this->setMethod(self::PUT);
  if ('application/x-www-form-urlencoded' === $this->getContentType())
  {
    parse_str($this->getContent(), $postParameters);
  }
  break;

そこで、ヘッダーの Content-Type をそれに設定しようとしましたが、何もしません。

お気づきの点がございましたら、お助けください!

4

1 に答える 1