1

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 を返すことができる解決策はありますか?

4

0 に答える 0