私の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;
}
}
そして ResourceAbstract:
<?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 を使用することになっています。コンストラクターのアプローチは正しいですか? これをどのように解決しますか?