Symfony services.yaml句柄异常

Symfony services.yaml句柄异常,symfony,autowired,Symfony,Autowired,在my services.yaml中,我有以下代码: services: # prepare database DatabaseProvider: class: Kepler\Providers\DatabaseProvider arguments: ['%database.reader.dsn%', '%database.reader.username%', '%database.reader.password%'] ReaderPDO

在my 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]
和数据库提供程序: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连接不工作/失败。那么我如何捕获这个异常并返回general 404页面呢?这是一个我不需要任何db连接的页面

一些基本分析:

我相信这在symfony启动时失败了 即使我在catch中返回null或不返回任何内容,代码仍将继续自动连接,这将在需要DB连接的控制器中失败 如果在catch块中返回的内容与在try块中返回的内容完全相同,那么在catch块中返回应该被认为是有害的

设定全球价值观真的是老生常谈,而不是真正的symfony方式。相反,您可以抛出一个特定的异常,或者只是不捕获PDO异常,然后为将由此产生的添加一个事件侦听器,您可以在其中查找该特定异常并返回所需的正确错误页面


如果你只是想要404页面,你可以抛出,或者更合适的…

哦,当我读到内核异常时,我认为这只是一个细枝渲染错误。我不知道它是否可以用于其他事情。基本上,当服务器返回一个错误,如404,拒绝访问。。。或者是一个实际的服务器错误,并且有一个ExceptionController被深埋,如果抛出异常,它将使用twig来呈现错误页面。但是你可以干预,做你自己的事情,或者实现你自己的异常控制器。我一定会尝试一下。谢谢