使用eloquent的胶囊管理器无法捕获PDO异常

I've got a class that extends the capsule manager of eloquent :

class Database extends \Illuminate\Database\Capsule\Manager

Inside of it, I'm adding a connection in the constructor :

public function __construct()
{ 
    parent::__construct();

    try {
        $this->addConnection([
            'driver' => 'mysql',
            'host' => $server,
            'database' => $database,
            'username' => $username,
            'password' => $password,
            'charset' => 'utf8',
            'collation' => 'utf8_unicode_ci',
            'prefix' => '',
        ]);

        $this->setAsGlobal();
        $this->bootEloquent();

    } catch (\Exception $ex) {
        exit("Can't connect to database");
    }
}

The problem here is that the catch is never called, if any of the database connection information is false, I get a Fatal error: Uncaught PDOException and not the exit I'm looking to get.

I suppose the problem is due to me having my own class that extends of the capsule manager, but how do I catch the connection errors in my own class using eloquent?

EDIT : Traceback -

Fatal error: Uncaught PDOException: PDO::__construct(): php_network_getaddresses: getaddrinfo failed: Name or service not known in /var/www/vendor/illuminate/database/Connectors/Connector.php:70 Stack trace: #0 /var/www/vendor/illuminate/database/Connectors/Connector.php(70): PDO->__construct('mysql:host=mari...', 'root', 'root', Array) #1 /var/www/vendor/illuminate/database/Connectors/Connector.php(46): Illuminate\Database\Connectors\Connector->createPdoConnection('mysql:host=mari...', 'root', 'root', Array) #2 /var/www/vendor/illuminate/database/Connectors/MySqlConnector.php(24): Illuminate\Database\Connectors\Connector->createConnection('mysql:host=mari...', Array, Array) #3 /var/www/vendor/illuminate/database/Connectors/ConnectionFactory.php(182): Illuminate\Database\Connectors\MySqlConnector->connect(Array) #4 [internal function]: Illuminate\Database\Connectors\ConnectionFactory->Illuminate\Database\Connectors{closure}() #5 /var/www/vendor/illuminate/database/Connection.php(918): call_user_func(Object(Closure)) #6 /va in /var/www/vendor/illuminate/database/Connection.php on line 664

Having the class looking like this, and extending the select, update, insert functions :

class Database extends \Illuminate\Database\Capsule\Manager
{

    public function __construct()
    {
    }

    public static function select(string $query, array $params = [])
    {

    }

    public static function insert(string $query, array $params = [])
    {
    }

    public static function update(string $query, array $params = [])
    {
        return parent::update($query, $params);
    }

}

And then writing for example this :

new Database;
Database::update('XXX', []);
donglu8334
donglu8334 这是一个很好的尝试,但返回parent::getConnection()实际上没有给出错误,它返回一个存在的Illuminate\Database\MySqlConnection对象。
大约一年之前 回复
douchangmian0305
douchangmian0305 尝试重写getConnection()方法并在try/catch中包装parent::getConnection()。
大约一年之前 回复
dongzhou1865
dongzhou1865 不幸的是,这是我发布的整个堆栈跟踪,我没有别的。每个页面都有数百个DB调用,我无法尝试/捕获所有这些调用。try/catch需要在类中,这是我想要做的但我无法弄清楚正确的方法:/
大约一年之前 回复
duanli8391
duanli8391 整个堆栈跟踪是什么样的?不是例外来自Database::update('XXX',[]);?你有没有试过它?
大约一年之前 回复
dsdzz04802
dsdzz04802 问题更新了,如果这回答了你的问题?
大约一年之前 回复
doujubeng2942
doujubeng2942 你是如何使用胶囊管理器的?你的班级是什么样的?
大约一年之前 回复
dongqianzhan8325
dongqianzhan8325 它来自供应商内部的一个类,你可以在我的编辑中看到,但它并没有在我的构造函数中的任何地方初始化。任何想法如何使用我的课程来捕捉错误?
大约一年之前 回复
dtng5978
dtng5978 addConnection()不连接数据库,它只注册配置。PDOException必须来自其他地方,其中连接实际打开(并且失败)。
大约一年之前 回复
dongsao8279
dongsao8279 很好的建议,不幸的是没有,我仍然有致命的错误,没有退出。虽然,现在有了你的建议,我写了两次错误,一个在另一个之下。一旦作为致命错误,一旦一个数组有[“code”]=>“E_ERROR”和[“message”]=>“UncaughtPDOException...等
大约一年之前 回复
dongyuxiao6295
dongyuxiao6295 您是否尝试将调用放入try/catch中的父构造函数?假设导致错误的代码必须在该构造函数中似乎是合乎逻辑的
大约一年之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问