Рейтинг:2

Как вернуть пустой массив сборки и записать ошибку?

флаг pe

Я использую следующий код для блока.

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(' ', []);. Я не понимаю, как я мог вернуть пустой массив сборки и логировать ошибку, и куда все это вставлять в код.

apaderno avatar
флаг us
По сути, вы не знаете, какой параметр передать [`\Drupal::logger()`](https://api.drupal.org/api/drupal/core%21lib%21Drupal.php/function/Drupal% 3A%3Alogger/9.3.x) и какие параметры передавать в [`error()`](https://api.drupal.org/api/drupal/vendor%21psr%21log%21Psr%21Log%21LoggerInterface.php /function/LoggerInterface%3A%3Aerror/9.3.x). Что именно ты не понимаешь? Без очень конкретного вопроса мы бы просто сказали то, что уже сказано в документации.
apaderno avatar
флаг us
Что касается *Я не понимаю, как я мог вернуть пустой массив сборки и зарегистрировать ошибку*, вы сначала вызываете `Drupal::logger()->error()` с правильными параметрами, а затем возвращаете пустой массив. Именно так работает PHP, а не что-то специфичное для Drupal.

Ответить или комментировать

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