Я пытаюсь отправить данные 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]);
}