Виправлені помилки

Виправлені помилки

Помилки попередніх версій і версія, з якої їх виправлено. Якщо ви на зачепленій версії — оновіться або скористайтеся обхідним шляхом. Актуальні помилки — на сторінці Актуальні помилки.

REST-виклики не генерували rpc.post_response

Виправлено в 1.3 (ще не випущена)

Зачеплені версії: 1.0.0 — 1.2.0. За описом релізу 1.3.

Симптом. Після REST-виклику не спрацьовували лістенери rpc.post_response: інвалідація #[RPC\CacheRelation], асинхронні й post-response лістенери застосунку.

Виправлення. Контролер виконує запит через RpcExecutor JsonRpcBundle 10.4.2; успішний виклик отримує rpc.post_response на kernel.terminate.


Значення шляху й query не підходили для типізованих параметрів

Виправлено в 1.3 (ще не випущена)

Зачеплені версії: 1.0.0 — 1.2.0.

Симптом. GET /rest/catalog/items/42 для item(int $id) повертав 400 з must be of type int, string given.

Виправлення. RpcFromRest приводить рядки зі шляху, query і форми до оголошеного скалярного типу параметра — див. Параметри запиту.


Невідомий метод і помилки обмежень повертали 400

Виправлено в 1.3 (ще не випущена)

Зачеплені версії: 1.0.0 — 1.2.0.

Симптом. RpcMethodNotFoundExceptionRpc і ConstraintsImposedException поверталися як 400 замість 404 і 422.

Причина. Обидва класи — підкласи RpcBadRequestException, який стояв у RestErrorNormalizer::ERROR_MAPPING раніше за них; крім того, RestValidationException не реалізовував RestErrorInterface і не створювався без масиву обмежень.

Виправлення. Підкласи перевіряються перед батьківськими класами; RestValidationException реалізує RestErrorInterface і бере обмеження з попереднього винятку.


HTTP-код прикладної помилки ігнорувався

Виправлено в 1.3 (ще не випущена)

Зачеплені версії: 1.0.0 — 1.2.0.

Симптом. throw new CustomApplicationException('Order is closed', 409) з методу повертав 400.

Причина. RestErrorNormalizer створював REST-виняток з кодом 0 для класів з таблиці, а для решти перевіряв код через in_array() по текстах статусів, тож перевірка ніколи не спрацьовувала.

Виправлення. HTTP-код помилки з винятку зберігається — див. Обробка помилок.


RestApplicationException не завантажувався

Виправлено в 1.3 (ще не випущена)

Зачеплені версії: 1.0.0 — 1.2.0.

Симптом. Фатальна помилка під час використання RestApplicationException або перетворення прикладної помилки.

Причина. Клас успадковував Ufo\RpcError\RpcCustomApplicationException, якого немає в ufo-tech/rpc-exceptions 2.x.

Виправлення. Клас успадковує Ufo\RpcError\CustomApplicationException; аргументи конструктора необов'язкові.


Колекція Postman падала з JsonRpcBundle 10.3+

Виправлено в 1.3 (ще не випущена)

Зачеплені версії: 1.2.0. За описом релізу 1.3.

Симптом. GET /rest/postman завершувався фатальною помилкою з JsonRpcBundle 10.3 і новіше.

Причина. PostmanAdapter перевизначав властивість $requestStack, яку в 10.3 отримав базовий AbstractPostmanAdapter.

Виправлення. RequestStack передається в конструктор базового адаптера.


Некоректне JSON-тіло ігнорувалось

Виправлено в 1.1.0

Зачеплені версії: 1.0.0.

Симптом. Метод виконувався без параметрів з тіла, якщо тіло не було коректним JSON.

Виправлення. Некоректне або скалярне JSON-тіло повертає 400.


Неправильний HTTP-метод повертав 404

Виправлено в 1.1.0

Зачеплені версії: 1.0.0.

Симптом. Запит до наявного шляху з HTTP-методом, якого немає в #[Route], повертав 404.

Виправлення. Кожен REST-маршрут отримує запасний маршрут <назва>_method_not_allowed, і такий запит повертає 405.