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

Answers


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

Need Your Help

What is this type of web control/widget called?

jquery plugins widget

I'm looking to create a menu that is a hybrid of an accordion control and a fly-out menu, but I want to have it expand across the x axis instead of the y:

Angular HTML 5 Input display nothing when decimal is null

javascript html angularjs html5

Here is my input which right now displays NaN if vehicle.total is null.