我想在结帐和客户中提供Magento中地址表格的其他服务器端验证。我可以覆盖 Mage_Checkout_OnepageController, Mage_Checkout_MultishippingControllerMage_Customer_AddressController, ,但这似乎有点多,我必须明确包括控制器路径,这似乎很脏。

如果我依靠事件系统并在适当的控制器行动之后进行验证,则可能必须积极地 撤消 控制器完成的操作,例如删除会话消息或删除或会话中的更改地址。 (我也依靠事件系统是同步的,虽然True看起来很肮脏,如果其他事件影响我正在工作的事件,我将依靠事件的顺序。)

我想最好的选择是覆盖 Mage_Eav_Model_Form->validateData(). 。与上述某些选项不同的唯一问题仅使我有机会设置错误消息,有时您想修改实际的JSON数据(例如,使用户能够在替代方案中进行选择)。

当我研究如何做到这一点时,Google出现了有关覆盖客户端验证的结果,但是服务器端似乎并不多。有通用吗 正确的路 进行服务器端形式验证覆盖?

更新: :我还发现有一个回调注册表 Varien_Object->save(), ,但它只有在保存之后才会发生。如果在保存之前发生回调,它将提供服务,但我没有看到这样的东西。

有帮助吗?

解决方案

一种方法是将调度事件插入控制器并在此处验证,如果您发现绝对错误的东西,请设置驱动操作,然后将其重定向回到Form Page。这仍然是做事的肮脏方法,但是当验证逻辑在控制器中发生时,您只有很少的选择。

许可以下: CC-BY-SA归因
scroll top