Cakephp - detect if unable to connect to database and recover gracefully
I have a few sites built with Cakephp. If any of these sites lose their connection to the database for whatever reason it does not handle it well. Basically it renders itself inside itself trying to display an error over and over until the browser crashes. The rendering itself inside itself is caused by the use of requestAction from elements.
What I want to know is 开发者_运维问答how can I check if the database connection exists
I tried this in the app_controller before filter:
if(!ConnectionManager::getDataSource('default'))
{
die(); //this will be a message instead
}
but it does not seem to work.
Thanks
Use the following code:
<?php
$filePresent = true;
if (!file_exists(CONFIGS.'database.php')):
echo '<span class="notice-failure">Database configuration file is not present. Please contact admin@website</span>';
$filePresent = false;
endif;
if ($filePresent!=false):
uses('model' . DS . 'connection_manager');
$db = ConnectionManager::getInstance();
@$connected = $db->getDataSource('default');
if (!$connected->isConnected()):
echo '<p><span class="notice-failure">Not able to connect to the database. Please contact admin@website</span></p>';
endif;
endif;
?>
Here I'm printing messages (in those tags). You can replace the echo line with die().
(Cakephp 3.x) Just follow the example given in PagesController's Home view:
Basically it is:
use Cake\Datasource\ConnectionManager;
try {
$connection = ConnectionManager::get('yourconnection');
$connected = $connection->connect();
} catch (Exception $connectionError) {
//Couldn't connect
}
//connected
精彩评论