2015-10-19 3 views
0

Я обновляюсь до тонкого v3. Как использовать соединение с базой данных? Я думаю о службе инъецируют прыщ:Обработка данных об исключении службы Slim Framework DB

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(); 
}; 

Что делать, если подключение к БД повышения ПДО (или общий) Exception ? В v2 у меня было что-то вроде

$app->error 

сейчас что? Я также определил пользовательский errorHandler, как я могу как-то «перенаправить» контроль над этим маршрутом?

+0

Что вы имеете в виду «как я могу каким-то образом„перенаправить“контроль над этим маршрутом?»? –

ответ

0

Обработка ошибок Slim 3 очень проста, как explained in the documentation.

Поскольку вы определили контейнерные сервисы перед инстанцированием 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; 
    } 
} 

 Смежные вопросы

  • Нет связанных вопросов^_^