Как я могу переопределить проверку формы на стороне сервера?
-
16-10-2019 - |
Вопрос
Я хочу предоставить дополнительную проверку серверных форм адресов в Magento, как в кассовом порядке, так и в клиенте. Я могу переопределить Mage_Checkout_OnepageController
, Mage_Checkout_MultishippingController
а также Mage_Customer_AddressController
, но это кажется немного большим, и мне пришлось бы явно включить путь контроллера, который кажется грязным.
Если я полагаюсь на систему событий и выполняю свою проверку после соответствующего действия контроллера, мне, возможно, придется активно отменить Вещи, сделанные контроллером, такие как удаление сообщений сеанса или удаление или изменение адресов в сеансе. (Я бы также полагался на синхронную систему событий, что, хотя истинно кажется грязной, и я бы полагался на порядок событий, если другие события влияют на то, над чем я работаю.)
Я полагаю, что лучше всего будет переопределить Mage_Eav_Model_Form->validateData()
. Анкет Единственная проблема с тем, что в отличие от некоторых из вышеперечисленных вариантов, она дает мне только возможность установить сообщения об ошибках, и иногда вы хотите изменить фактические данные JSON, возвращающиеся (например, дать пользователю возможность выбирать среди альтернатив).
Когда я исследовал, как это сделать, Google обнаружил результаты о переоценке проверки на стороне клиента, но, похоже, не так много на стороне сервера. Есть общий правильно Чтобы сделать переоценку проверки формы на стороне сервера?
Обновлять: Я также обнаружил, что есть реестр обратного вызова для Varien_Object->save()
, но это происходит только после сохранения. Если бы был обратный вызов, который произошел до сохранения, это служит, но я не видел ничего подобного.
Решение
Одним из способов будет подключить контроллеры перед отправными событиями и проверить там, если вы найдете что -то абсолютно неправильное, установите действие для отправки и перенаправления обратно на страницу формы. Это все еще грязный способ сделать что -то, но когда логика проверки происходит в контроллере, у вас есть только несколько вариантов.