Источник
Обсуждение: комментарий на modx.pro
Проблема
Фронтенд (публичный Web API) вызывает endpoints, которые не зарегистрированы в core/components/minishop3/config/routes/web.php:
-
CustomerAPI.add() → POST /api/v1/customer/add
- Используется в
CustomerUI.handleAdd() при изменении полей формы профиля (initInput → handleAdd).
- Документация в JSDoc класса
CustomerAPI также ссылается на этот путь.
-
CustomerAPI.changeAddress() → POST /api/v1/customer/changeAddress
- Используется в
CustomerUI.handleChangeAddress().
В web.php для группы /customer есть login, register, profile (PUT), CRUD адресов и др., но нет /add и нет /changeAddress.
Воспроизведение
Например (как в комментарии к новости):
await ms3.customerUI.handleAdd("email", "user@example.com")
или любое автосохранение поля формы клиента, которое идёт через CustomerUI.initInput → customer.add().
Ожидается успешный ответ API; фактически запрос уходит на несуществующий маршрут (404 / ошибка маршрутизации).
Причина
Расхождение контракта: методы и комментарии в assets/components/minishop3/js/web/core/CustomerAPI.js описывают маршруты, которые на бэкенде не добавлены. Либо маршруты не были реализованы, либо клиент должен вызывать другие существующие endpoints.
Замечания по возможному решению (на обсуждение)
- Регистрация пользователя — уже есть
POST /api/v1/customer/register (CustomerAPI.register / AuthUI.handleRegister); сценарий «только email» через handleAdd семантически ближе не к register, а к частичному обновлению профиля (если клиент уже в сессии).
- Обновление профиля —
PUT /api/v1/customer/profile (CustomerProfileController::update) сейчас валидирует все поля (first_name, last_name, email, phone) разом, поэтому напрямую заменить add(key, value) на одиночный PUT без доработки бэкенда нельзя.
- Варианты фикса:
- Добавить в
web.php обработчики POST /customer/add и при необходимости POST /customer/changeAddress с логикой частичного обновления / делегированием в существующие сервисы.
- Либо изменить
CustomerAPI / CustomerUI: для пошагового сохранения полей использовать согласованный с бэкендом контракт (например, PATCH/profile с частичной валидацией или иной уже существующий процессор), и обновить JSDoc/документацию.
Дополнительно: для заказа похожий паттерн order.add реализован (POST /api/v1/order/add); для выбора сохранённого адреса в заказе используется POST /api/v1/order/address/set, а не customer changeAddress.
Файлы
- Клиент:
assets/components/minishop3/js/web/core/CustomerAPI.js (методы add, changeAddress)
- UI:
assets/components/minishop3/js/web/ui/CustomerUI.js (handleAdd, handleChangeAddress)
- Маршруты:
core/components/minishop3/config/routes/web.php (группа /customer)
Источник
Обсуждение: комментарий на modx.pro
Проблема
Фронтенд (публичный Web API) вызывает endpoints, которые не зарегистрированы в
core/components/minishop3/config/routes/web.php:CustomerAPI.add()→POST /api/v1/customer/addCustomerUI.handleAdd()при изменении полей формы профиля (initInput→handleAdd).CustomerAPIтакже ссылается на этот путь.CustomerAPI.changeAddress()→POST /api/v1/customer/changeAddressCustomerUI.handleChangeAddress().В
web.phpдля группы/customerестьlogin,register,profile(PUT), CRUD адресов и др., но нет/addи нет/changeAddress.Воспроизведение
Например (как в комментарии к новости):
или любое автосохранение поля формы клиента, которое идёт через
CustomerUI.initInput→customer.add().Ожидается успешный ответ API; фактически запрос уходит на несуществующий маршрут (404 / ошибка маршрутизации).
Причина
Расхождение контракта: методы и комментарии в
assets/components/minishop3/js/web/core/CustomerAPI.jsописывают маршруты, которые на бэкенде не добавлены. Либо маршруты не были реализованы, либо клиент должен вызывать другие существующие endpoints.Замечания по возможному решению (на обсуждение)
POST /api/v1/customer/register(CustomerAPI.register/AuthUI.handleRegister); сценарий «только email» черезhandleAddсемантически ближе не к register, а к частичному обновлению профиля (если клиент уже в сессии).PUT /api/v1/customer/profile(CustomerProfileController::update) сейчас валидирует все поля (first_name,last_name,email,phone) разом, поэтому напрямую заменитьadd(key, value)на одиночный PUT без доработки бэкенда нельзя.web.phpобработчикиPOST /customer/addи при необходимостиPOST /customer/changeAddressс логикой частичного обновления / делегированием в существующие сервисы.CustomerAPI/CustomerUI: для пошагового сохранения полей использовать согласованный с бэкендом контракт (например, PATCH/profile с частичной валидацией или иной уже существующий процессор), и обновить JSDoc/документацию.Дополнительно: для заказа похожий паттерн
order.addреализован (POST /api/v1/order/add); для выбора сохранённого адреса в заказе используетсяPOST /api/v1/order/address/set, а не customer changeAddress.Файлы
assets/components/minishop3/js/web/core/CustomerAPI.js(методыadd,changeAddress)assets/components/minishop3/js/web/ui/CustomerUI.js(handleAdd,handleChangeAddress)core/components/minishop3/config/routes/web.php(группа/customer)