HEAD
アジリティでリクエストを実装するときに、404 not found で応答できません。デフォルトでは、 Apigility はHEAD
リクエストと同じリソース メソッドでGET
リクエストを処理します。これがfetch($id)
方法です。
私のリソースは次のようになります。
class MyResource extends AbstractResourceListener implements ResourceInterface
{
public function fetch($id)
{
$entity = $this->getEntityById($id, false);
if ($entity === null) {
return new ApiProblemResponse(new ApiProblem(404, 'Entity with ID ' . $id . ' not found'));
}
return $entity;
}
}
を使用して REST クライアントでリソースにアクセスするとHEAD
、200 OK が返されます。ApiProblemResponse
メソッドから が返されていることを確認できます。を使用してリソースを要求するGET
と、予想どおり 404 応答が返されます。
HEAD
でのとGET
の扱いに関係しているようAbstractRestfulController
です。関連するコードのコード スニペットを次に示します。
case 'get':
$id = $this->getIdentifier($routeMatch, $request);
if ($id !== false) {
$action = 'get';
$return = $this->get($id);
break;
}
$action = 'getList';
$return = $this->getList();
break;
// HEAD
case 'head':
$id = $this->getIdentifier($routeMatch, $request);
if ($id === false) {
$id = null;
}
$action = 'head';
$this->head($id);
$response = $e->getResponse();
$response->setContent('');
$return = $response;
break;
get 実装では、resourceListener メソッドからの結果がアプリケーションの応答として返されます。これは私には正しいようです。head の実装では、MvcEvent 応答が使用されるためApiProblemResponse
、resourceListener から返される I は無視されます。MvcEvent
からにアクセスできませんResourceListener
。
HEAD
リクエストに対して 404 を返すことができる解決策はありますか?