我试图从我的JWT课程中发现错误,但是我不能在课堂上做错,我唯一能得到它的地方是来自我的主要来电者。
我使用我的" API"中的错误来调用此类。我从路由开始:
$router = new Router();
$router->all('/users', function()
{
$controller = new Controllers\UserController();
$controller->start();
});
$router->run();
之后,我的控制器将调用我的" API"类:
class UserAPI extends BaseAPI
{
protected $user;
protected $apiBase = "user";
function __construct($request, $origin)
{
parent::__construct($request);
$this->user = new User();
}
protected function logout()
{
if( isset($this->request[$this->apiBase . 'Data']) )
{
return $this->usuario->login($this->request[$this->apiBase . 'Data']);
}
else
{
return Helpers::errorResponse("User data not informed", 200);
}
}
}
最后我遇到了问题,User类我想捕获一个错误,但它不会工作:
class User extends SimpleModel
{
public function logout($userData)
{
try
{
//At this point i will get an error since the provided token is invalid on purpose
$jwt = JWT::decode($userData['token'], SECRET_KEY, ['HS512']);
}
//Wont hit here even for a miracle
catch (Exception $exception)
{
echo "Caught ExceptFoo\n";
echo "Message: {$exception->getMessage()}\n";
}
}
}
唯一可以捕获此错误的地方是路由文件,这是我的index.php文件。
对于JWT课程我使用Firebase JWT。
答案 0 :(得分:2)
相对类名(如示例中的Exception
)始终以您所在的命名空间为根。如果未定义命名空间,则使用\
。考虑:
<?php
namespace Foo;
use Vendor\Package\Bar;
try {
Bar::throwAnException();
} catch (Exception $ex) {
die((string)$ex);
}
这里我们有两个相对的类路径:Bar
和Exception
。 PHP通过Bar
语句将use
解析为绝对类路径\Vendor\Package\Bar
。 PHP没有与use
对应的Exception
语句,因此PHP 假定您的意思是\Foo\Exception
。
显然,这不是你的意图。不幸的是,当这种情况发生时,PHP是静默的。它被我咬了几次。