Я не могу ответить с 404 не найден при реализации HEAD
запрос в скорости.
Ручки 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 ОК. Я могу подтвердить 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. Я не могу получить доступ к MvcEvent
от моего ResourceListener
,
У кого-нибудь есть решение, чтобы иметь возможность вернуть 404 за HEAD
запрос?
Задача ещё не решена.
Других решений пока нет …