在我的 Apigility 项目中,我有不同的 Rest 资源,它们都扩展了我的类 ResourseAbstract,并且在那里我根据 Apigility 的需要扩展了 AbstractResourceListener。
因此,例如我的资源用户:
<?php
namespace Marketplace\V1\Rest\User;
use ZF\ApiProblem\ApiProblem;
use Marketplace\V1\Abstracts\ResourceAbstract;
class UserResource extends ResourceAbstract
{
public function fetch($id)
{
$result = $this->getUserCollection()->findOne(['id'=>$id]);
return $result;
}
}
和资源摘要:
<?php
namespace Marketplace\V1\Abstracts;
use ZF\Rest\AbstractResourceListener;
use Zend\ServiceManager\ServiceLocatorAwareInterface;
use Zend\ServiceManager\ServiceLocatorInterface;
use ZF\ApiProblem\ApiProblem;
class ResourceAbstract extends AbstractResourceListener implements ServiceLocatorAwareInterface {
}
现在,每次发出 http 请求时,我都需要运行一个函数,如果我在浏览器中查询 /user,UserResource 类将被实例化,因此 ResourceAbstract,我在每次调用时运行某些东西的“解决方案”是使用ResourceAbstract 中的构造函数,它“有效”:
function __construct() {
$appKey = isset(getallheaders()['X-App-Key']) ? getallheaders()['X-App-Key'] : null;
$token = isset(getallheaders()['X-Auth-Token']) ? getallheaders()['X-Auth-Token'] : null;
//some code
return new ApiProblem(400, 'The request you made was malformed');
}
问题是在某些情况下我需要返回一个 ApiProblem(http 请求上的错误标头),但正如您所知,构造函数不返回参数。另一种解决方案是抛出异常,但在 Apigility 中,当出现 api 问题时,您应该设置 ApiProblem。构造函数方法是否正确?你将如何解决这个问题?