好的,我很困惑。我正在使用Slim框架,我有以下代码:
1 $app->post("/user/login", function (Request $request, Response $response) {
2 $resp = null;
3 try {
4 if (!array_key_exists("password", $request->getParams()) || !array_key_exists("username", $request->getParams())) {
5 throw new LiberInvalidRequestException("Not all required parameters were passed.");
6 }
7 $user = new User($this->db, [
8 'username' => $request->getParam('username'),
9 'password' => $request->getParam('password')
10 ]);
11 try {
12 $resp['logincode'] = $user->login();
13 $resp['success'] = true;
14 } catch (LiberAuthenticationException $exception) {
15 $resp['success'] = false;
16 $resp['errormessage'] = $exception->getMessage();
17 }
18 } catch (LiberInvalidRequestException $exception) {
19 $resp['success'] = false;
20 $resp['errormessage'] = $exception->getMessage();
21 } finally {
22 return $response->withJson($resp);
23 }
24 });
当我使用正确的参数调用此路线时,我得到null
响应。在我看来,这不应该是可能的,因为以某种可能的方式将某些东西分配给$resp
。当我使用调试器执行此功能时,我可以直到第12行,然后调试器跳转到finally块(第22行)。
这怎么可能?不应该继续执行或转到catch块吗?
答案 0 :(得分:1)
好的,我找到了问题的解决方案。正如@deceze所说,有一个异常抛出,阻止块没有捕获。由于我使用PHP7.1 include语句可以抛出异常。这就是为什么首先抛出异常的原因。