CakePHP Создать источник данных на лету создать ошибку - PullRequest
0 голосов
/ 28 декабря 2011

Я создал метод класса, который создает источник данных на лету, чтобы проверить правильность информации о подключении к базе данных. Массив, содержащий информацию для соединения, имеет следующий вид:

Array
(
    [datasource] => Database/Mysql
    [persistent] => 0
    [host] => localhost
    [login] => root
    [password] => 
    [database] => wp33
    [prefix] => dr_
    [encoding] => UTF8
    [port] => 
)

и мой метод содержит этот код:

@App::import('Model', 'ConnectionManager');

ConnectionManager::create('Default', $config);
$db = ConnectionManager::getDataSource('default');

if(!$db->isConnected())
{
    $this->Session->setFlash(__d('dir', 'Could not connect to database.'), 'Flash/error');
    return;
}

Обратите внимание, что $ config содержит данные из вышеуказанного массива.

Проблема в том, что код метода возвращает эту ошибку:

Отсутствует соединение с базой данных Ошибка: SQLSTATE [42000] [1049] Неизвестная база данных «wp33» требует подключения к базе данных Ошибка: подтвердите, что вы создали файл: app \ Config \ database.php.

потому что база данных shema wp33 не существует на моем сервере баз данных.

Что мне нравится делать, так это прекращать эту ошибку со стороны CakePHP и отображать ошибку для моего клиента с помощью $ this-> Session-> setFlash вместо ошибки CakePHP по умолчанию.

Есть ли хорошая идея?

1 Ответ

2 голосов
/ 29 декабря 2011

Перехватите MissingDatabaseException и используйте getMessage (), чтобы установить сообщение об ошибке для флэш-памяти сеанса.

try {
    ConnectionManager::create('Default', $config);
    $db = ConnectionManager::getDataSource('default');
} catch (MissingDatabaseException $e) {
    $this->Session->setFlash($e->getMessage()); 
}

Как то так.

...