Я работаю над проектом в качестве внутреннего разработчика, используя PHP 7.2.11 и Symfony 4.2.3
Моя цель - показать события (концерты, фестивали ...) из данных, которые я получаю из API на интерактивной карте.
Вот результат, который я получаю:
https://imgur.com/HmpBK5B.png
Чтобы импортировать данные из API, я использую для цикла , который идет от 1 до 7 (соответствует дням) и добавляет дни к сегодняшней дате.
Эта дата будет использоваться в качестве параметра для захвата событий, происходящих с сегодняшнего дня до следующих 7 дней.
Проблема заключается в следующем: я получаю следующую ошибку при выполнении моей собственной команды symfony
php bin / console import: mapado :
2019-03-26T12: 08: 34 + 01: 00 [ошибка] Ошибка при выполнении команды «import: mapado». Сообщение: «Примечание: неопределенный индекс: адрес»
Ошибка связана с тем, что дата не существует, а затем ссылается на несуществующий адрес.
Я пытался изменить параметры в моем первом цикле for, при этом дни шли либо к 8, либо к 6, но это не изменило ошибку вывода.
Я изменяю пользовательский параметр даты (из моего цикла) с URL-адреса API на параметр по умолчанию, и все работает по умолчанию (но он получает события только на 3 следующих дня).
Вот параметр, который я использую:
https://imgur.com/tx1OyrM.png
От: https://api.mapado.net/v2/docs#operation/getActivityCollection
А как выглядит элемент из API:
https://imgur.com/l1nTOCC.png
Это код, который я написал:
protected function execute(InputInterface $input, OutputInterface $output) {
for ($jour = 0; $jour <= 7; $jour++) {
// problem is here
$futureDay = date('Y-m-d', strtotime('+'.$jour.' days'));
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => "https://api.mapado.net/v2/activities?fields=@id,title,shortDate,nextDate,activityType,locale,description,address&itemsPerPage=1000&when=".$futureDay."&periodOfDay=evening",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => array(
"Authorization: Bearer MTMwZWJiODFiZjA4YTcyOGY2ZmMzMGYwOTQyYWM2NDZjODVlNDg1MzU0MzE3M2I4MTdiMDQyZjU5MDVkZjFjZA",
"Cache-Control: no-cache",
"Conent-Type: application/json",
"Content-Type: application/x-www-form-urlencoded",
"Postman-Token: 55672a19-0ffc-4fe6-a866-3e15c3df9dae"
),
));
$response = curl_exec($curl);
$err = curl_error($curl);
$mapado_events = json_decode($response, JSON_PRETTY_PRINT);
for ($i = 0; $i < count($mapado_events['hydra:member']); $i++) {
if ($mapado_events['hydra:member'][$i]['locale'] == 'fr') {
$mapado_id = $mapado_events['hydra:member'][$i]['@id'];
$mapado_date = \date('Y-m-d', strtotime($mapado_events['hydra:member'][$i]['nextDate']));
$result = $this->getContainer()
->get('doctrine')
->getRepository(MapadoIDs::class)
->findOneBy(['mapado_id' => $mapado_id]);
if ($result == null) {
echo 'event existe pas, ajout en bdd'.PHP_EOL;
$MapadoIDs = new MapadoIDs();
$MapadoIDs->setMapadoId($mapado_id);
$this->em->persist($MapadoIDs);
$mapado = json_decode($response, JSON_PRETTY_PRINT);
$event = new Event();
$event->setLongitude($mapado['hydra:member'][$i]['address']['longitude']);
$event->setLatitude($mapado['hydra:member'][$i]['address']['latitude']);
$event->setTitle($mapado['hydra:member'][$i]['title']);
$event->setDate($mapado_date);
$event->setFormattedAddress($mapado['hydra:member'][$i]['address']['formattedAddress']);
$event->setCity($mapado['hydra:member'][$i]['address']['city']);
$event->setLocale($mapado['hydra:member'][$i]['locale']);
$event->setActivityType($mapado['hydra:member'][$i]['activityType']);
$event->setDescription($mapado['hydra:member'][$i]['description']);
$this->em->persist($event);
}
}
}
}
$this->em->flush();
curl_close($curl);
if ($err) {
echo "cURL Error #: " . $err;
} else {
echo $response;
}
}
}
для лучшей читаемости:
https://pastebin.com/CTu5gb8t
Ожидаемый результат - вывод json в моей консоли.
Фактический результат - ошибка, из-за которой я не могу вставить результаты в базу данных.
Не могли бы вы сказать мне, если я что-то упустил, что может привести к этой ошибке?
Это длинный и подробный пост, чтобы вы могли лучше понять мою проблему.