Я использую следующий код для блока.
class 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->status == 'успешно') {
вернуть $data_ip->город;
}
еще {
return $this->configFactory->get('sydneypro_weather.settings')->get('weather_city');
}
}
поймать (RequestException $e) {
вернуть ЛОЖЬ;
}
}
общедоступная функция сборки () {
$client = $this->httpClient;
$api_key = $this->configFactory->get('sydneypro_weather.settings')->get('weather_api_key');
$cid = 'sydneypro_weather';
если (пусто($api_key)) {
возвращаться [
'#type' => 'разметка',
'#markup' => $this->t('Пожалуйста, введите свой ключ API в панели администратора, чтобы увидеть погоду'),
];
}
пытаться {
если ($cache = $this->cacheBackend->get($cid)) {
$данные = $кэш->данные;
}
еще {
$response = $client->get('http://api.openweathermap.org/data/2.5/weather?q=' . $this->getCity() . ',&appid=' . $api_key . '&units= метрика');
$response_data = $response->getBody();
$данные = json_decode($response_data);
$this->cacheBackend->set($cid, $data, $this->time->getRequestTime() + 21600);
}
$ построить = [
'#theme' => 'погода_блок',
'#данные' => $данные,
'# прикрепленный' => [
'библиотека' => [
'sydneypro_weather/sydneypro_weather',
],
],
];
вернуть $сборку;
}
поймать (RequestException $ e) {
возвращаться [
'#markup' => Markup::create('<h1>Извините, данные недоступны</h1>'),
];
}
}
}
Конфигурация игнорируется с помощью модуля Config ignore; когда я развертываю веб-сайт в другой среде, конфигурация модуля (которая игнорируется) не создается в базе данных во время драш цим. Когда конфигурация отсутствует, мне нужно вернуть пустой массив сборки и записать ошибку.
Я рассмотрел несколько примеров, где логгер вызывается с помощью \Drupal::logger(' ')->error(' ', []);. Я не понимаю, как я мог вернуть пустой массив сборки и логировать ошибку, и куда все это вставлять в код.