Frage

Ich möchte eine zusätzliche serverseitige Validierung der Adressformulare in Magento sowohl in Checkout als auch im Kunden bereitstellen. Ich kann überschreiben Mage_Checkout_OnepageController, Mage_Checkout_MultishippingController und Mage_Customer_AddressController, aber das scheint ein bisschen viel zu sein, und ich müsste explizit den Controller -Pfad einbeziehen, der schmutzig erscheint.

Wenn ich mich auf das Ereignissystem verlasse und nach der entsprechenden Controller -Aktion meine Validierung durchführe, muss ich möglicherweise aktiv aktiv rückgängig machen Dinge, die der Controller erledigt hat, z. B. Sitzungsmeldungen entfernen oder Adressen in der Sitzung löschen oder ändern. (Ich würde mich auch darauf verlassen, dass das Ereignissystem synchron ist, was zwar schmutzig erscheint, und ich würde mich auf die Reihenfolge der Ereignisse verlassen, wenn andere Ereignisse das beeinflussen, woran ich arbeite.)

Ich nehme an, die beste Wette wäre es, außer Kraft zu setzen Mage_Eav_Model_Form->validateData(). Das einzige Problem damit, dass ich im Gegensatz zu einigen der oben genannten Optionen nur die Möglichkeit gibt, Fehlermeldungen festzulegen, und manchmal möchten Sie die tatsächlichen JSON -Daten ändern (z. B. um dem Benutzer die Möglichkeit zu geben, zwischen Alternativen zu wählen).

Wenn ich recherchierte, wie dies zu tun ist, hat Google Ergebnisse zur übergeordneten clientseitigen Validierung erzielt, aber es scheint nicht viel über serverseitig zu sein. Gibt es eine generische richtiger Weg Überschreibungen für serverseitige Formularvalidierung?

Aktualisieren: Ich habe auch festgestellt, dass es eine Rückrufregistrierung gibt Varien_Object->save(), aber es passiert erst nach dem Speichern. Wenn es einen Rückruf gab, der vor dem Rettung passiert, würde ich so etwas nicht gesehen.

War es hilfreich?

Lösung

Eine Möglichkeit besteht darin, Ereignisse vor dem Versand von Controllern vor dem Versand zu schalten und dort etwas zu validieren. Wenn Sie etwas finden, das absolut falsch ist, sollten Sie die Aktion festlegen und wieder auf die Formseite umleiten. Es ist immer noch schmutzig, Dinge zu tun, aber wenn die Validierungslogik im Controller stattfindet, haben Sie nur wenige Optionen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit magento.stackexchange
scroll top