services - symfony service tags



Sollte ich Fehler in einem Controller oder in einem Service protokollieren? (1)

Ich habe einen Symfony-Controller, der im Grunde prüft, ob die angeforderten Parameter in der Anfrage sind, und dann diese Parameter an einen Dienst weitergibt. Der Dienst verwendet Guzzle, um eine API aufzurufen, führt einige Dinge mit dem Ergebnis aus und gibt sie dann an den Controller zurück, um einen JSON mit der Antwort anzuzeigen.

Ich habe eine noob Frage über die Behandlung von Fehlern, wenn die API, die ich mit Guzzle rufe, einen Fehler zurückgibt, was ist die beste Lösung?

Lösung 1: Sollte ich den Fehler mit dem Logger-Dienst protokollieren, der in meinem eigenen Dienst eingefügt wurde, und einen Fehler an meinen Controller zurückgeben, um ihn anzuzeigen.

Lösung 2: Sollte ich eine Exception in den Dienst werfen, fange sie in meinem Controller und verwende $ this-> get ("Logger") in der Steuerung, um den Fehler in den Log-Dateien zu protokollieren


Es wäre schön, wenn Ihre Kernlogik selbst in einem Dienst und nicht in Ihrem Controller ist .

Auf diese Weise können Sie den try-catch-Block innerhalb des Dienstes verwenden, in dem Sie einen anderen Dienst anrufen, und Ihr Controller bleibt sauber und ordentlich - Sie rufen den Dienst einfach an, ohne irgendeine Ausnahme zu bemerken.

// AppBundle/src/Controller/MainController.php
public function mainAction()
{
  // ...
  $result = $this->get('my_service')->getResult($parameters);
  if (!$result) {
    // show an error message, pass it to another service, ignore it or whatever you like
  }
}

// AppBundle/src/Service/MyService.php
public function getResult($parameters)
{
  try {
    $apiResult = $this->apiService->get($parameters);
  } catch (ApiException $e)
    $this->logger->error('My error message');
    $apiResult = null;
  }

  return $apiResult;
}

Erwägen Sie auch eine Lösung 3 : Werfen Sie eine Ausnahme in einen Service und fangen Sie sie in einem benutzerdefinierten Ausnahme-Listener ab , wo Sie sie protokollieren und weitere Maßnahmen ergreifen können (z. B. Ersetzen des Response-Objekts usw.).





monolog