1

ログイン後、Magento の特定のユーザーを products.html ページにリダイレクトしようとしています。リダイレクトが多すぎるために、ほとんどすべての方法 (setRedirect、ヘッダー) でループが発生します。

現在、私はオブザーバーを setParam('return_url', "$customerRedirectUrl") に使用しようとしています。変数 $customerRedirectUrl は、必要なページの URL を一緒に確実に作成するロジックを表します。関連するコードは次のようになります。

   public function redirect(Varien_Event_Observer $observer)
{
    $helper = Mage::helper('personal_order');
    $isPersonalOrderStore = $helper->isPersonalOrderStore(null);
    $session = Mage::getSingleton('customer/session');



    if ($isPersonalorderStore){
        if(!$session->isLoggedIn()) {
            $targetUrl = Mage::getBaseUrl(Mage_Core_Model_Store::URL_TYPE_WEB).'customer/account/login';
            Mage::app()->getResponse()->setRedirect($targetUrl);


      } else {
           $baseUrl = Mage::getBaseUrl(Mage_Core_Model_Store::URL_TYPE_WEB);
           $storeName =  strtolower(Mage::app()->getStore()->getName());
           $storeName = str_replace(' ', '', $storeName);
           $customerRedirectUrl = "$baseUrl$storeName/products.html";

           $observer->getRequest()->setParam('return_url',"$customerRedirectUrl");
        }
    }

私の目的にとって重要な部分は、else ステートメントです。関数の残りの部分は正常に動作します。ただし、setParam を呼び出すと、次のエラーが発生します。

致命的なエラー: オブジェクト以外でメンバー関数 setParam() を呼び出しています...

Magento - Redirect Customer from Observer Methodの投稿についてはどうですか? オブザーバーは、controller_action_postdispatch の下の相対構成ファイルに配置され、オブザーバー モデルにあります。setParam が正しく動作するためのコンテキストは何ですか?

助けてくれてありがとう!

4

2 に答える 2

0

でオブジェクトをインスタンス化する際に問題がある場合は、代わりに$observer->getRequest()を使用してみてください。$observer->getEvent()->getFront()->getResponse()これは、オブザーバーが聞いているイベントによって異なると思います。

于 2013-05-29T23:26:50.700 に答える