Хорошо, я очень смущен. Я использую Slim Framework и у меня есть следующий код:
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?
Хорошо, я нашел решение проблемы. Как сказал @deceze, было создано исключение, что блок catch не перехватил. Поскольку я использую PHP7.1, операторы include могут генерировать исключения. Это причина, почему исключение было брошено в первую очередь.
Других решений пока нет …