2015-10-19 1 views
0

Je suis en train de passer à la version 3 de Slim. Comment dois-je utiliser une connexion à une base de données? Je pense à un service injecté Pimple:Gestion des exceptions de service de base de données avec cadre fin

DBConnection

final class DBConnection { 

    private $db; 

    public function __construct() { 
     try { 
      // Code to open up a DB connection in $db var... 
     } catch (Exception $ex) { 
      // TODO $app->error ? 
     } 
    } 

    public function getDB() { 
     return $this->db; 
    } 

} 

index.php

$container = new \Slim\Container; 

$container['db'] = function($container) { 
    $connection = new DBConnection(); 
    return $connection->getDB(); 
}; 

si la connexion db élever une AOP (ou générique) Exception ? En v2 j'avais quelque chose comme

$app->error 

maintenant quoi? J'ai aussi défini un errorHandler personnalisé, comment puis-je "rediriger" le contrôle sur cette route?

+0

Que voulez-vous dire par « comment puis-je en quelque sorte « rediriger » le contrôle sur cette route? »? –

Répondre

0

La gestion des erreurs de Slim 3 est très simple: explained in the documentation.

Puisque vous définissez vous les services de conteneurs avant instanciation Slim\App, définir gestionnaire d'erreurs de la manière suivante (en index.php):

$container['errorHandler'] = function($container) { 
    return function ($request, $response, $exception) use ($container) { 
     return $container['response']->withStatus(500) 
            ->withHeader('Content-Type', 'text/html') 
            ->write($exception->getMessage()); 
    }; 
}; 

Toutes exception sera interceptée par le gestionnaire défini, aussi longtemps que:

  • l'exception n'a pas été pris auparavant (comme dans votre exemple de code)
  • l'exception ne fait pas partie de ceux-ci:
    • Slim\Exception\MethodNotAllowedException
    • Slim\Exception\NotFoundException
    • Slim\Exception\SlimException

Pour les deux premiers, vous pouvez définir vos propres gestionnaires aussi bien.

Donc, à votre exemple:

final class DBConnection { 

    private $db; 

    public function __construct() { 
     // Code to open up a DB connection in $db var... 
     // Don't have to catch here 
    } 

    public function getDB() { 
     return $this->db; 
    } 
}