PHP Symfony curl пост данных не найден - PullRequest
0 голосов
/ 25 апреля 2018

Я пытаюсь отправить данные Post из проекта Symfony в другой проект Symfony (используется как API).Но данные, похоже, не следуют запросу.

Проблема, похоже, связана с тем, что данные поста cURL необходимо перепечатывать после изменения URL.Потому что, если я удалю «curl_setopt ($ curl, CURLOPT_FOLLOWLOCATION, 1);», ответом будет html-страница, пытающаяся обновить ту же самую запрашиваемую страницу.

Я использую, чтобы получить «args not found» в соответствии сследующий код ..

вызов контроллера (проект A)

public function onlineHandlerAction(Request $req, $name, $surname)
{

    $url = $this->getParameter("api"). "avis/find";

    $args = array(
        "name" => "qsdqsdqsd",
        "surname" => $surname,
        "birthdate" => $defunt->getBirthDate()->getTimestamp()
    );

    $apiRes = $kgns->CallAPI('POST', $url, $args);

    var_dump($apiRes);

    return $this->render('**:online-handler.html.twig', array(
        'res' => $apiRes
    ));                                             

}

вызов API-функции, которую я нашел в Интернете, и редактирование для моей необходимости.(инструмент проекта A)

public function CallAPI($method, $url, $data = false)
{

    $curl = curl_init();

  switch ($method)
  {
      case "POST":
          curl_setopt($curl, CURLOPT_POST, 1);

          if ($data)
              curl_setopt($curl, CURLOPT_POSTFIELDS, $data);
          break;
      case "PUT":
          curl_setopt($curl, CURLOPT_PUT, 1);
          break;
      default:
          if ($data)
              $url = sprintf("%s?%s", $url, http_build_query($data));
  }

  curl_setopt($curl, CURLOPT_HTTPHEADER, array('Content-type: application/json'));
  curl_setopt($curl, CURLOPT_URL, $url);
  curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
  curl_setopt($curl, CURLOPT_FOLLOWLOCATION, 1);    
  curl_setopt($curl, CURLOPT_POSTREDIR, 1);

  $result = curl_exec($curl);

  curl_close($curl);

  return $result;

}

API-функция (проект B)

public function avisFindAction(Request $req)
{


  $em = $this->getDoctrine()->getManager();

  $args = $req->request->all();

  $argsFound = false;


  if(null !== $args && count($args) > 0):

    $argsFound = true;

    foreach ($args as $key => $value) {
      if($key=='birthdate') $args[$key] = new \DateTime($value);
      else $args[$key] = $value;
    }

    $avis = $em->getRepository('MainBundle:Avis')
                  ->findOneBy($args);

    if($avis):

      $encoders = array(new JsonEncoder());               
      $normalizers = array(new ObjectNormalizer());
      $serializer = new Serializer($normalizers, $encoders);
      $avisJSON = $serializer->serialize($avis, 'json');

      $response = new Response($avisJSON);
      $response->headers->set('Content-Type', 'application/json');
      return $response;

    else:

      $response = ["error"=>"avis not found"];

    endif;

  else:

    $response = ["error"=>"args not found"];

  endif;

  return new JsonResponse(['test'=>'test', 'argsFound'=>$argsFound]);

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...