php - PHP Klein 未捕获错误:错误的参数
问题描述
我正在尝试使用 Klein 作为路由库来构建 PHP REST API。尝试测试其中一条 get 路由会引发以下异常:
<br />
<b>Fatal error</b>: Uncaught Error: Wrong parameters for Klein\Exceptions\UnhandledException([string
$message [, long $code [, Throwable $previous = NULL]]]) in C:\DA4NA4\Web\task-
scheduler\vendor\klein\klein\src\Klein\Klein.php:954
Stack trace:
#0 C:\DA4NA4\Web\task-scheduler\vendor\klein\klein\src\Klein\Klein.php(954): Exception-
>__construct('SQLSTATE[HY000]...', 'HY000', Object(PDOException))
#1 C:\DA4NA4\Web\task-scheduler\vendor\klein\klein\src\Klein\Klein.php(645): Klein\Klein-
>error(Object(PDOException))
#2 C:\DA4NA4\Web\task-scheduler\public\index.php(20): Klein\Klein->dispatch()
#3 {main}
thrown in <b>C:\DA4NA4\Web\task-scheduler\vendor\klein\klein\src\Klein\Klein.php</b> on line
<b>954</b><br />
我的路线文件包含以下代码:
<?PHP
require_once '../bootstrap.php';
use Api\Controllers\UserController;
$users = new UserController();
/**
* user routes
*/
//1. get user
$klein->respond('GET', '/api/users/[:username]', function($request){
global $users;
return $users->getUser($request->username);
});
//dispatch routes
$klein->dispatch();
最后,这是来自 UserController 类的方法:
public function getUser(string $username){
/**
* process requests for a username
* @param string $username
*/
/**
* set http headers
*/
\header('Access-Control-Allow-Origin:*');
\header('Access-Control-Allow-Methods: GET');
\header('Content-Type: application/json; charset=UTF-8');
\header('Access-Control-Max-Age: 3600');
/**
* sanitize username
*/
$username = \test_input($username);
if(empty($username)){
throw new Exception('Provide username');
}
$user = $this->model->getOne($username);
if($user){
/**
* set http status code
* 200 - successfull
*/
\http_response_code(200);
/**
* encode the user records in json format
* send encode records to user
*/
echo \json_encode(['status'=>true, 'message'=>$user]);
}
}
我可能做错了什么?
解决方案
问题是异常代码应该是整数(在堆栈跟踪中很长),但 PDOException 返回字符串作为异常代码。
自 2015 年以来,关于此问题存在一个未解决的问题:https ://github.com/klein/klein.php/issues/298
更大的问题是您使用的库已经 4 年未维护(自 2017 年 2 月以来)。我的建议是寻找克莱因路由器的替代品。
推荐阅读
- mysql - 使用 TIMESTAMPDIFF 计算平均年数
- xcode - 可能是约束在 Xcode 中无法正常工作
- javascript - 如何将使用 ngfor 打印的数据拆分为 3 列角度?
- mysql - MYSQL- 将数据集计数为 1(不像不同的)
- javascript - 为什么我无法在模态中获取输入值(使用 Jquery 和 Javascript)
- android-emulator - android studio 模拟器声音
- ssl - 如何为我的网站启用 SSL 证书?
- php - 允许的内存大小为 134217728 字节已用尽(尝试分配 31989760 字节)在 do...while 循环中
- bash - 以 bash 友好的方式格式化 Go 日期
- python - 在python中隐藏一个函数