2010-03-25 6 views
7

मेरे पास केकफ़्प के साथ बनाई गई कुछ साइटें हैं। यदि इनमें से कोई भी साइट डेटाबेस से अपना कनेक्शन खो देती है तो किसी भी कारण से यह इसे अच्छी तरह से संभाल नहीं पाती है। मूल रूप से यह ब्राउज़र के दुर्घटनाग्रस्त होने तक एक त्रुटि को प्रदर्शित करने की कोशिश कर रहा है। अपने आप में प्रतिपादन स्वयं तत्वों से अनुरोध के उपयोग के कारण होता है।केकफ़्पी - पता लगाएँ कि डेटाबेस से कनेक्ट करने में असमर्थ है और

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

लेकिन यह काम करने के लिए प्रतीत नहीं होता:

क्या मैं जानना चाहता हूँ अगर डेटाबेस कनेक्शन मौजूद है

मैं फिल्टर से पहले app_controller में यह करने की कोशिश की मैं कैसे जांच कर सकते हैं है।

धन्यवाद

उत्तर

7

निम्नलिखित कोड का उपयोग करें:

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

यहाँ मैं संदेशों मुद्रण कर रहा हूँ (उन टैग में)। आप इको लाइन को मर() के साथ बदल सकते हैं।

+0

आपको बहुत बहुत धन्यवाद –

+1

मैं इस का उपयोग मुझे अगर एक ईमेल भेजने के डीबी कभी नीचे चला जाता है! (अमेज़ॅन आरडीएस के साथ Im), महान काम करता है! +1 – Anil

1

(CakePHP 3.x) बस उदाहरण PagesController के य में दिया का पालन करें:

मूल रूप से यह है:

use Cake\Datasource\ConnectionManager; 

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

यह केक 3 के नए संस्करणों में काम करता है लेकिन मुझे कोई अपवाद नहीं मिल सकता है, इसके बजाय केक त्रुटि संदेश देखने के लिए "src \ Template \ error \ missing_connection.ctp" दृश्य का उपयोग करता है ... – Snorvarg

+0

फिक्स्ड, अपवादों का उपयोग कर अपवाद पकड़ सकता है "अपवाद" के बजाय "\ अपवाद"। इसे देखें: https://stackoverflow.com/questions/30995594/how-do-i-throw-a-custom-try-catch-exception-on-cakephp – Snorvarg