有没有办法使用 Symfony 4 修复日期错误?
Is there a way to fix a date error using Symfony 4?
我作为后端开发人员正在使用 PHP 7.2.11 和 Symfony 4.2.3
开发一个项目
我的目标是根据我从交互式地图上的 API 抓取的数据展示活动(音乐会、节日......)。
这是我得到的结果:
为了从 API 导入数据,我使用了一个 for 循环 从 1 到 7(对应天数)并将天数添加到今天的日期。
这个日期将用作参数来抓取从今天到接下来 7 天发生的事件。
问题是:我收到以下错误 运行 我的自定义 symfony 命令
php bin/console import:mapado :
2019-03-26T12:08:34+01:00 [error] Error thrown while running command "import:mapado". Message: "Notice: Undefined index: address"
错误是由于日期不存在,然后引用不存在的地址。
我尝试更改我的第一个 for 循环中的参数,将天数设置为 8 或 6,但它没有更改输出错误。
我将自定义日期参数(来自我的循环)从 API url 更改为默认参数,一切都在默认情况下工作(但它只获取接下来 3 天的事件).
这是我使用的参数:
发件人:https://api.mapado.net/v2/docs#operation/getActivityCollection
API 中的元素看起来像:
这是我写的代码:
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;
}
}
}
为了更好的可读性:
预期结果是在我的控制台中输出 json。
实际结果是抛出一个错误,阻止我将结果插入我的数据库。
你能告诉我是否遗漏了可能导致此错误的内容吗?
这篇文章又长又详细post,这样你可以更好地理解我的问题。
好吧,我解决了我的问题,这不是日期问题。
问题出在 itemsPerPage 查询参数请求过多数据然后引发错误。
我将其设置为 400,一切正常。
我作为后端开发人员正在使用 PHP 7.2.11 和 Symfony 4.2.3
开发一个项目我的目标是根据我从交互式地图上的 API 抓取的数据展示活动(音乐会、节日......)。
这是我得到的结果:
为了从 API 导入数据,我使用了一个 for 循环 从 1 到 7(对应天数)并将天数添加到今天的日期。
这个日期将用作参数来抓取从今天到接下来 7 天发生的事件。
问题是:我收到以下错误 运行 我的自定义 symfony 命令 php bin/console import:mapado :
2019-03-26T12:08:34+01:00 [error] Error thrown while running command "import:mapado". Message: "Notice: Undefined index: address"
错误是由于日期不存在,然后引用不存在的地址。
我尝试更改我的第一个 for 循环中的参数,将天数设置为 8 或 6,但它没有更改输出错误。
我将自定义日期参数(来自我的循环)从 API url 更改为默认参数,一切都在默认情况下工作(但它只获取接下来 3 天的事件).
这是我使用的参数:
发件人:https://api.mapado.net/v2/docs#operation/getActivityCollection
API 中的元素看起来像:
这是我写的代码:
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;
}
}
}
为了更好的可读性:
预期结果是在我的控制台中输出 json。 实际结果是抛出一个错误,阻止我将结果插入我的数据库。
你能告诉我是否遗漏了可能导致此错误的内容吗?
这篇文章又长又详细post,这样你可以更好地理解我的问题。
好吧,我解决了我的问题,这不是日期问题。
问题出在 itemsPerPage 查询参数请求过多数据然后引发错误。
我将其设置为 400,一切正常。