Symfony services.yaml句柄异常
在my 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
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来呈现错误页面。但是你可以干预,做你自己的事情,或者实现你自己的异常控制器。我一定会尝试一下。谢谢