Есть ли способ исправить ошибку даты с помощью Symfony 4?

#date #command #symfony4 #php-7.2

#Дата #команда #symfony4 #php-7.2

Вопрос:

Я работаю над проектом в качестве серверного разработчика, используя PHP 7.2.11 и Symfony 4.2.3

Моя цель — отображать события (концерты, фестивали …) на основе данных, которые я получаю из API, на интерактивной карте.

Вот результат, который я получаю:

https://imgur.com/HmpBK5B.png

Чтобы импортировать данные из API, я использую цикл for, переходящий от 1 к 7 (соответствующий дням) и добавляющий дни к сегодняшней дате.

Эта дата будет использоваться в качестве параметра для захвата событий, происходящих с сегодняшнего дня по следующие 7 дней.

Проблема в том, что при запуске моей пользовательской команды symfony я получаю следующую ошибку php bin / console import: mapado :

2019-03-26T12:08:34 01:00 [ошибка] Ошибка, возникающая при выполнении команды «импорт: 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,addressamp;itemsPerPage=1000amp;when=".$futureDay."amp;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 в моей консоли. Фактический результат — это ошибка, которая не позволяет мне вставлять результаты в мою базу данных.

Не могли бы вы сказать мне, не упускаю ли я чего-то, что могло привести к этой ошибке?

Это длинный и подробный пост, чтобы вы могли лучше понять мою проблему.

Ответ №1:

Ну, я решил свою проблему, и это была не проблема с датой.

Проблема заключалась в том, что параметр запроса itemsPerPage запрашивал слишком много данных, а затем выдавал ошибку.

Я установил значение 400, и все работает, как ожидалось.