Cakephp - определить, если не удается подключиться к базе данных и изящно восстановить - PullRequest
7 голосов
/ 25 марта 2010

У меня есть несколько сайтов, созданных с помощью Cakephp. Если по какой-либо причине какой-либо из этих сайтов теряет связь с базой данных, он плохо с этим справляется. По сути, он отрисовывается внутри себя, пытаясь снова и снова отображать ошибку, пока не произойдет сбой браузера. Сам рендеринг внутри себя вызван использованием requestAction от элементов.

Я хочу знать, как я могу проверить, существует ли соединение с базой данных

Я пробовал это в app_controller перед фильтром:

if(!ConnectionManager::getDataSource('default'))
 {
  die(); //this will be a message instead
 }

но, похоже, не работает.

Спасибо

Ответы [ 2 ]

7 голосов
/ 25 марта 2010

Используйте следующий код:

<?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;
?>

Здесь я печатаю сообщения (в этих тегах). Вы можете заменить строку эха на die ().

1 голос
/ 05 января 2017

(Cakephp 3.x) Просто следуйте примеру, приведенному в домашнем представлении PagesController:

В основном это:

    use Cake\Datasource\ConnectionManager;

    try {
        $connection = ConnectionManager::get('yourconnection');
        $connected = $connection->connect();
    } catch (Exception $connectionError) {
        //Couldn't connect
    }
    //connected
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...