因此,我试图找到使PHP SLIM 3将PHP异常和错误记录到数据库表而不是日志中的最佳方法。什么是实现这一目标的最佳方法?到目前为止,在文档中建议这样做。
依赖关系:
$app = new \Slim\App();
$c = $app->getContainer();
$c['errorHandler'] = function ($c) {
return function ($request, $response, $exception) use ($c) {
return $response->withStatus(500)
->withHeader('Content-Type', 'text/html')
->write('Something went wrong!');
};
};
我在理解时遇到的困难是该在哪里调用它,以及如何连接它以将其登录到我创建的数据库表中。有任何想法吗?
最佳答案
您是否已针对Slim 3尝试过此功能?
$config = [
'settings' => [
'displayErrorDetails' => true,
'db' => [
'driver' => 'mysql',
'host' => 'localhost',
'username' => 'root',
'database' => 'test',
'password' => '',
'charset' => 'utf8mb4',
'collation' => 'utf8mb4_unicode_ci',
'flags' => [
PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
],
]
],
];
$app = new \Slim\App($config);
$container = $app->getContainer();
$container[PDO::class] = function ($container) {
$settings = $container['settings']['db'];
$host = $settings['host'];
$dbname = $settings['database'];
$username = $settings['username'];
$password = $settings['password'];
$charset = $settings['charset'];
$flags = $settings['flags'];
$dsn = "mysql:host=$host;dbname=$dbname;charset=$charset";
return new PDO($dsn, $username, $password, $flags);
}
$container[PDO::class] = function ($container) {
$settings = $container['settings']['db'];
$host = $settings['host'];
$dbname = $settings['database'];
$username = $settings['username'];
$password = $settings['password'];
$charset = $settings['charset'];
$flags = $settings['flags'];
$dsn = "mysql:host=$host;dbname=$dbname;charset=$charset";
return new PDO($dsn, $username, $password, $flags);
};
$container ['errorHandler'] = function ($container ) {
$connection = container[PDO::class];
return function ($request, $response, $exception) use ($connection) {
$row = [
'message' => $exception->getMessage(),
];
$sql = "INSERT INTO error_logs SET message=:message";
$connection->prepare($sql)->execute($row);
return $response->withStatus(500)
->withHeader('Content-Type', 'text/html')
->write('Something went wrong!');
};
};
关于php - 将PHP异常和错误记录到数据库表PHP Slim 3中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62212812/