2010-03-25 15 views
7

Tengo algunos sitios creados con Cakephp. Si alguno de estos sitios pierde su conexión a la base de datos por algún motivo, no lo maneja bien. Básicamente se presenta dentro de sí mismo tratando de mostrar un error una y otra vez hasta que el navegador se cuelga. La representación en sí misma es causada por el uso de requestAction de los elementos.Cakephp: detecta si no se puede conectar a la base de datos y recupera correctamente

Lo que quiero saber es ¿cómo puedo comprobar si existe la conexión de base de datos

He intentado esto en el app_controller antes del filtro:

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

pero no parece funcionar.

Gracias

Respuesta

7

utilizar el siguiente código:

<?php 
$filePresent = true; 
if (!file_exists(CONFIGS.'database.php')): 
    echo '<span class="notice-failure">Database configuration file is not present. Please contact [email protected]</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 [email protected]</span></p>'; 
    endif; 
endif; 
?> 

Aquí estoy imprimir mensajes (en esas etiquetas). Puede reemplazar la línea de eco con die().

+0

Muchas gracias –

+1

Lo utilizo para enviar un correo electrónico si el ¡DB cae alguna vez! (Estoy con Amazon RDS), ¡funciona genial! +1 – Anil

1

(Cakephp 3.x) Sólo tienes que seguir el ejemplo dado en vista de inicio de PagesController:

Básicamente se trata de:

use Cake\Datasource\ConnectionManager; 

    try { 
     $connection = ConnectionManager::get('yourconnection'); 
     $connected = $connection->connect(); 
    } catch (Exception $connectionError) { 
     //Couldn't connect 
    } 
    //connected 
+0

Esto funciona en versiones más nuevas de cake 3. Pero no puedo capturar ninguna excepción, en su lugar cake usa la vista "src \ Template \ Error \ missing_connection.ctp" para ver el mensaje de error ... – Snorvarg

+0

Solucionado, puede detectar excepciones usando "\ Exception" en lugar de "Exception". Mira esto: https://stackoverflow.com/questions/30995594/how-do-i-throw-a-custom-try-catch-exception-on-cakephp – Snorvarg

Cuestiones relacionadas