Folosesc următorul cod pentru un bloc.
clasa WeatherBlock extinde BlockBase implementează ContainerFactoryPluginInterface {
// Cod de injectare a dependenței
funcția publică getCity() {
$ip = '193.62.157.66';
încerca {
$response_ip = $this->httpClient->get('http://ip-api.com/json/' . $ip);
$response_data_ip = $response_ip->getBody();
$data_ip = json_decode($response_data_ip);
if ($data_ip->status == 'succes') {
return $data_ip->city;
}
else {
return $this->configFactory->get('sydneypro_weather.settings')->get('weather_city');
}
}
catch (RequestException $e) {
returnează FALSE;
}
}
public function build() {
$client = $this->httpClient;
$api_key = $this->configFactory->get('sydneypro_weather.settings')->get('weather_api_key');
$cid = 'sydneypro_weather';
dacă (gol ($api_key)) {
întoarcere [
'#type' => 'markup',
'#markup' => $this->t('Vă rugăm să introduceți cheia dvs. API în panoul de administrare pentru a vedea vremea'),
];
}
încerca {
if ($cache = $this->cacheBackend->get($cid)) {
$date = $cache->date;
}
else {
$response = $client->get('http://api.openweathermap.org/data/2.5/weather?q=' . $this->getCity() . ',&appid=' . $api_key . '&units= metric');
$response_data = $răspuns->getBody();
$date = json_decode($response_data);
$this->cacheBackend->set($cid, $data, $this->time->getRequestTime() + 21600);
}
$build = [
'#theme' => 'bloc_meteorologic',
'#data' => $date,
'#attached' => [
'biblioteca' => [
„sydneypro_weather/sydneypro_weather”,
],
],
];
returnează $build;
}
catch (RequestException $e) {
întoarcere [
'#markup' => Markup::create('<h1>Ne pare rău, nu există date disponibile</h1>'),
];
}
}
}
Configurația este ignorată folosind modulul Config ignore; când implementez site-ul web într-un alt mediu, configurația modulului (care este ignorată) nu este creată în baza de date în timpul drush cim. Când lipsește configurația, trebuie să returnez o matrice de compilare goală și să înregistrez o eroare.
M-am uitat la câteva exemple în care loggerul este numit folosind \Drupal::logger(' ')->error(' ', []);. Nu înțeleg cum aș putea returna o matrice de compilare goală și să înregistrez o eroare și unde să inserez toate acestea în cod.