首页 > 解决方案 > 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- 
&gt;__construct('SQLSTATE[HY000]...', 'HY000', Object(PDOException))
#1 C:\DA4NA4\Web\task-scheduler\vendor\klein\klein\src\Klein\Klein.php(645): Klein\Klein- 
&gt;error(Object(PDOException))
#2 C:\DA4NA4\Web\task-scheduler\public\index.php(20): Klein\Klein-&gt;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]);
        }
    }

我可能做错了什么?

标签: php

解决方案


问题是异常代码应该是整数(在堆栈跟踪中很长),但 PDOException 返回字符串作为异常代码。

自 2015 年以来,关于此问题存在一个未解决的问题:https ://github.com/klein/klein.php/issues/298

更大的问题是您使用的库已经 4 年未维护(自 2017 年 2 月以来)。我的建议是寻找克莱因路由器的替代品。


推荐阅读