Symfony services.yaml 处理异常

Symfony services.yaml handle exception

在我的 services.yaml 中,我有以下代码:

services:
    # prepare database
    DatabaseProvider:
        class: Kepler\Providers\DatabaseProvider
        arguments: ['%database.reader.dsn%', '%database.reader.username%', '%database.reader.password%']

    ReaderPDO:
        class: PDO
        factory: ['@DatabaseProvider', generateDatabaseConnection]

    WriterPDO:
        class: PDO
        factory: ['@DatabaseProvider', generateDatabaseConnection]

和DatabaseProvider:generateDatabaseConnection

public function generateDatabaseConnection() {
        try {
            return new PDO($this->host, $this->username, $this->password);
        } catch (Exception $e) {
            return new PDO($this->host, $this->username, $this->password);
            $_GLOBALS['db_error'] = true;
        }
    }

所以我的问题来了:会出现PDO连接不上的情况working/failing。那么我如何捕获此异常和 return 一般 404 页面(这是我不需要任何数据库连接的页面)?

一些基本分析:

catch 块中有一个 return 应该被认为是有害的,如果它 完全一样 被 return 编辑try 块。

设置一个全局值确实是老派,而不是 symfony 的方式。相反,您会抛出一个特定的异常(或者只是不捕获 PDO 异常),并为由此产生的 kernel exception 添加一个事件侦听器,您可以在其中查找该特定异常和 return您想要的正确错误页面。

如果你只想要 404 页面,你可以抛出 NotFoundHttpException or maybe more appropriate the ServiceUnavailableException ...