0

スリム v3 にアップグレードしています。データベース接続はどのように使用すればよいですか? にきびを注入したサービスについて考えています:

DB接続

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();
};

データベース接続で PDO (または一般的な) 例外が発生した場合はどうなりますか? v2では、次のようなものがありました

$app->error

それで?カスタム errorHandler も定義しましたが、どうすればそのルートのコントロールを「リダイレクト」できますか?

4

1 に答える 1

0

ドキュメント で説明されているように、 Slim 3 のエラー処理は非常に単純です。

をインスタンス化する前にコンテナ サービスを定義するためSlim\App、次の方法でエラー ハンドラを定義します ( を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());
    };
};

すべての例外は、次の場合に限り、定義されたハンドラーによってキャッチされます。

  • 例外は以前にキャッチされませんでした(サンプルコードのように)
  • 例外は次のいずれでもありません。
    • Slim\Exception\MethodNotAllowedException
    • Slim\Exception\NotFoundException
    • Slim\Exception\SlimException

最初の 2 つは、独自のハンドラーを定義することもできます。

だから、あなたの例に戻ります:

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;
    }
}
于 2016-10-03T12:41:00.557 に答える