7

オブザーバーから Magento で動作するリダイレクトを作成するのに問題があります。

私が知る限り、($observerオブジェクト内で) 応答オブジェクトを取得した多くのイベントがあります。別の方法は、次のようなものを使用することです

Mage::app()->getResponse()->setRedirect(Mage::getUrl('checkout/cart'));

ここで言及されているようにhttps://stackoverflow.com/a/4730200/1700048偉大なアラン・ストームによって。

sendResponse()残念ながら、次のように追加しても、これはうまくいきません。

Mage::app()->getResponse()->setRedirect(Mage::getUrl('checkout/cart'))->sendResponse();

例えば:

一部のメールアドレスからニュースレターを購読できないようにしたい。newsletter_subscriber_save_beforeしたがって、イベントのオブザーバーを作成しました。

私のオブザーバーメソッドでは、いくつかのケースをチェックし、それらがトリガーされた場合、ニュースレターの購読を保存しないようにしたいと考えています。私の計画は、次のようなエラーを追加することでした:

Mage::getSingleton('checkout/session')->addError('Email is spam!');

上記のようにリダイレクトを使用して現在のページをリロード (エラー メッセージを表示) するだけです (checkout/cartこの例では、実際に動作することを確認するだけです)。

残念ながら、リダイレクトは機能しません。sendResponseこの場合、応答を送信しないのはなぜですか?

手伝ってくれてありがとう :)

4

4 に答える 4

8

Silas Palmerのコードを短くして修正します。

Mage::getSingleton('checkout/session')->addError('Email is spam!');
Mage::app()->getResponse()->setRedirect(Mage::getUrl('checkout/cart'))->sendResponse();
exit;

これが誰かを助けることを願っています!

于 2013-12-18T07:34:27.117 に答える
0

オブザーバーを作成する代わりに、ニュースレターの保存コントローラーを独自のカスタムモジュールでオーバーライドし、そこにロジックをスパムしてから、ロジックの下にニュースレターのコードを追加することを検討してください。

また、保存ニュース レターの URL を新しいカスタム モジュール URL に変更し、スパム フィルターを実行して、それが有効な電子メールであると思われる場合は、通常の保存ニュース レターへの内部転送を行うこともできます ( 1 つのアクションを呼び出す方法を参照してください)。マジェントで別の?

したがって、コントローラーからのリダイレクトに問題はありません

于 2012-11-05T19:02:24.947 に答える
0

それはうまくいくはずです:s

呼び出しの直後にスクリプトを終了して、setRedirect()確実にそこに到達しているかどうかを確認しましたか?

于 2012-11-05T17:15:19.333 に答える