Dans mon projet PHP, j'utilise Guzzle pour effectuer un grand nombre de requêtes API différentes. Afin de gérer toutes les exceptions, chaque appel d'API est enveloppé dans un bloc try-catch. Un exemple :
try {
$res = $client->get($url, [
'headers' => [
'Authorization' => "bearer " . $jwt,
]
]);
} catch (ClientException $clientException) {
// Do stuff
} catch (ConnectException $connectException) {
// Do stuff
}catch (RequestException $requestException){
// Do stuff
}
Pour chaque demande, le traitement de l'exception est le même mais le bloc d'exécution réel diffère beaucoup et ne peut pas être simplement décrit par un tableau d'options.
Existe-t-il un moyen de créer une fonction/classe capable d'envelopper un bloc d'exécution personnalisé dans le même traitement try-catch ?
Les seules options que j'ai trouvées sont d'utiliser une interface avec une fonction execution()
qui est étendu par chaque enfant et une fonction run()
qui contient les blocs try-catch et appelle simplement $this->execution()
à l'intérieur du bloc d'exécution. Cela fonctionnerait, mais je trouve trop verbeuse la création d'une toute nouvelle classe pour chaque appel d'API différent qui n'est utilisé qu'à un seul endroit de mon projet.
Existe-t-il une solution meilleure/moins verbeuse pour éviter la répétition du code de la même gestion des exceptions ?