ฉันใช้รหัสต่อไปนี้สำหรับบล็อก
คลาส WeatherBlock ขยาย BlockBase ใช้ ContainerFactoryPluginInterface {
// รหัสการฉีดการพึ่งพา
ฟังก์ชั่นสาธารณะ getCity () {
$ip = '193.62.157.66';
พยายาม {
$response_ip = $this->httpClient->get('http://ip-api.com/json/' . $ip);
$response_data_ip = $response_ip->getBody();
$data_ip = json_decode($response_data_ip);
ถ้า ($data_ip->สถานะ == 'สำเร็จ') {
ส่งคืน $data_ip->เมือง;
}
อื่น {
ส่งคืน $this->configFactory->get('sydneypro_weather.settings')->get('weather_city');
}
}
จับ (RequestException $e) {
กลับ FALSE;
}
}
สร้างฟังก์ชั่นสาธารณะ () {
$client = $this->httpClient;
$api_key = $this->configFactory->get('sydneypro_weather.settings')->get('weather_api_key');
$cid = 'ซิดนีย์โปร_สภาพอากาศ';
ถ้า (ว่าง ($ api_key)) {
กลับ [
'#type' => 'มาร์กอัป',
'#markup' => $this->t('โปรดป้อนรหัส API ของคุณในแผงการดูแลระบบเพื่อดูสภาพอากาศ'),
];
}
พยายาม {
ถ้า ($cache = $this->cacheBackend->get($cid)) {
$data = $cache->ข้อมูล;
}
อื่น {
$response = $client->get('http://api.openweathermap.org/data/2.5/weather?q=' . $this->getCity() . ',&appid=' . $api_key '&units= เมตริก');
$response_data = $response->getBody();
$data = json_decode($response_data);
$this->cacheBackend->set($cid, $data, $this->time->getRequestTime() + 21600);
}
$ สร้าง = [
'#theme' => 'สภาพอากาศบล็อก',
'#data' => $data,
'#attached' => [
'ห้องสมุด' => [
'ซิดนีย์โปร_สภาพอากาศ/ซิดนีย์โปร_สภาพอากาศ',
]
]
];
ส่งคืน $build;
}
จับ (RequestException $e) {
กลับ [
'#markup' => มาร์กอัป::create('<h1>ขออภัย ไม่มีข้อมูล</h1>'),
];
}
}
}
การกำหนดค่าถูกละเว้นโดยใช้โมดูลละเว้นการกำหนดค่า เมื่อฉันปรับใช้เว็บไซต์กับสภาพแวดล้อมอื่น การกำหนดค่าโมดูล (ซึ่งถูกละเว้น) จะไม่ถูกสร้างในฐานข้อมูลในระหว่างนั้น ซิม. เมื่อการกำหนดค่าหายไป ฉันต้องส่งคืน build array ที่ว่างเปล่าและบันทึกข้อผิดพลาด
ฉันดูหลายตัวอย่างที่มีการเรียกใช้คนตัดไม้ \Drupal::logger(' ')->ข้อผิดพลาด (' ', []);. ฉันไม่เข้าใจว่าฉันจะส่งคืนอาร์เรย์บิลด์ที่ว่างเปล่าและบันทึกข้อผิดพลาดได้อย่างไร และจะแทรกทั้งหมดนี้ในโค้ดได้ที่ไหน