Я обновляю до Slim V3. Как мне использовать соединение с базой данных? Я думаю о сервисе, введенном с прыщом:
DBConnection
final class DBConnection {
private $db;
public function __construct() {
try {
// Code to open up a DB connection in $db var...
} catch (Exception $ex) {
// TODO $app->error ?
}
}
public function getDB() {
return $this->db;
}
}
index.php
$container = new \Slim\Container;
$container['db'] = function($container) {
$connection = new DBConnection();
return $connection->getDB();
};
Что, если соединение БД вызовет исключение PDO (или общее)? В v2 у меня было что-то вроде
$app->error
что теперь? Я также определил собственный errorHandler, как я могу как-то «перенаправить» контроль над этим маршрутом?
Обработка ошибок в Slim 3 очень проста: объяснено в документации.
Поскольку вы определяете свои контейнерные сервисы перед созданием Slim\App
определите обработчик ошибок следующим образом (в index.php
):
$container['errorHandler'] = function($container) {
return function ($request, $response, $exception) use ($container) {
return $container['response']->withStatus(500)
->withHeader('Content-Type', 'text/html')
->write($exception->getMessage());
};
};
Все исключения будут перехвачены определенным обработчиком, если:
Slim\Exception\MethodNotAllowedException
Slim\Exception\NotFoundException
Slim\Exception\SlimException
Для первых двух вы также можете определить свои собственные обработчики.
Итак, вернемся к вашему примеру:
final class DBConnection {
private $db;
public function __construct() {
// Code to open up a DB connection in $db var...
// Don't have to catch here
}
public function getDB() {
return $this->db;
}
}
Других решений пока нет …