サーバー側のフォーム検証をオーバーライドするにはどうすればよいですか?

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

質問

チェックアウトと顧客の両方で、Magentoのアドレスフォームのサーバー側の追加の検証を追加したいと思います。オーバーライドできます Mage_Checkout_OnepageController, Mage_Checkout_MultishippingControllerMage_Customer_AddressController, 、それは少し大きいようで、私は汚れているように見えるコントローラーパスを明示的に含める必要があります。

イベントシステムに頼って、適切なコントローラーアクションの後に検証を行う場合、積極的に必要な場合があります 元に戻します セッションメッセージを削除したり、セッションのアドレスを削除したり変更したりするなど、コントローラーが行ったこと。 (私はまた、イベントシステムが同期していることに依存していますが、それは真実が汚れているように見えますが、他のイベントが私が取り組んでいるものに影響を与えるとイベントの順序に依存しています。)

最善の策はオーバーライドすることだと思います Mage_Eav_Model_Form->validateData(). 。上記のオプションのいくつかとは異なり、エラーメッセージを設定する機会が得られるだけで、実際のJSONデータを変更する機会が得られるだけの問題があります(たとえば、ユーザーが代替案の中から選択できるようにするため)。

これを行う方法を調査したとき、Googleはクライアント側の検証を最優先する結果を示しましたが、サーバー側についてはあまりないようです。一般的なものはありますか 正しい方法 サーバー側のフォーム検証オーバーライドを行うには?

アップデート: :私はまた、のコールバックレジストリがあることを発見しました Varien_Object->save(), 、しかし、それは保存後にのみ起こります。保存の前に発生するコールバックがあった場合、それはそれが機能するでしょうが、私はそのようなものを見ませんでした。

役に立ちましたか?

解決

1つの方法は、絶対に間違っているものが見つかった場合は、コントローラーに事前発送イベントに接続して検証することです。それはまだ物事を行うための汚い方法ですが、コントローラーで検証ロジックが発生する場合、選択肢はほとんどありません。

ライセンス: CC-BY-SA帰属
所属していません magento.stackexchange
scroll top