我创建了一个类方法,用于动态创建数据源,以检查给定的数据库连接信息是否正确。保存连接信息的数组格式如下:
Array
(
[datasource] => Database/Mysql
[persistent] => 0
[host] => localhost
[login] => root
[password] =>
[database] => wp33
[prefix] => dr_
[encoding] => UTF8
[port] =>
)
我的方法中有这段代码:
@App::import('Model', 'ConnectionManager');
ConnectionManager::create('Default', $config);
$db = ConnectionManager::getDataSource('default');
if(!$db->isConnected())
{
$this->Session->setFlash(__d('dir', 'Could not connect to database.'), 'Flash/error');
return;
}
注意$config保存了上面数组的数据。
问题是方法代码返回错误:数据库连接缺失错误:SQLSTATE[42000][1049]未知数据库'wp33'需要数据库连接错误:确认你已经创建了文件:app'Config'database.php.
因为数据库模式wp33在我的数据库服务器上不存在。
我喜欢做的是停止从CakePHP端错误,并显示一个错误到我的客户端$this->Session->setFlash而不是默认的CakePHP错误。
有什么好主意吗?
捕获MissingDatabaseException并使用getMessage()将错误消息设置为会话flash
try {
ConnectionManager::create('Default', $config);
$db = ConnectionManager::getDataSource('default');
} catch (MissingDatabaseException $e) {
$this->Session->setFlash($e->getMessage());
}
就像这样