Как я могу переопределить проверку формы на стороне сервера?

magento.stackexchange https://magento.stackexchange.com/questions/168

Вопрос

Я хочу предоставить дополнительную проверку серверных форм адресов в Magento, как в кассовом порядке, так и в клиенте. Я могу переопределить Mage_Checkout_OnepageController, Mage_Checkout_MultishippingController а также Mage_Customer_AddressController, но это кажется немного большим, и мне пришлось бы явно включить путь контроллера, который кажется грязным.

Если я полагаюсь на систему событий и выполняю свою проверку после соответствующего действия контроллера, мне, возможно, придется активно отменить Вещи, сделанные контроллером, такие как удаление сообщений сеанса или удаление или изменение адресов в сеансе. (Я бы также полагался на синхронную систему событий, что, хотя истинно кажется грязной, и я бы полагался на порядок событий, если другие события влияют на то, над чем я работаю.)

Я полагаю, что лучше всего будет переопределить Mage_Eav_Model_Form->validateData(). Анкет Единственная проблема с тем, что в отличие от некоторых из вышеперечисленных вариантов, она дает мне только возможность установить сообщения об ошибках, и иногда вы хотите изменить фактические данные JSON, возвращающиеся (например, дать пользователю возможность выбирать среди альтернатив).

Когда я исследовал, как это сделать, Google обнаружил результаты о переоценке проверки на стороне клиента, но, похоже, не так много на стороне сервера. Есть общий правильно Чтобы сделать переоценку проверки формы на стороне сервера?

Обновлять: Я также обнаружил, что есть реестр обратного вызова для Varien_Object->save(), но это происходит только после сохранения. Если бы был обратный вызов, который произошел до сохранения, это служит, но я не видел ничего подобного.

Это было полезно?

Решение

Одним из способов будет подключить контроллеры перед отправными событиями и проверить там, если вы найдете что -то абсолютно неправильное, установите действие для отправки и перенаправления обратно на страницу формы. Это все еще грязный способ сделать что -то, но когда логика проверки происходит в контроллере, у вас есть только несколько вариантов.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с magento.stackexchange
scroll top