Magento-通过Observer登录时重定向

Magento-通过Observer登录时重定向,magento,redirect,observers,Magento,Redirect,Observers,我正在尝试在登录后将Magento中的特定用户重定向到products.html页面。我尝试这样做的每一种方式(setRedirect,header)都会由于重定向太多而导致循环 目前,我正在尝试使用一个观察者来设置参数('return_url',“$customerRedirectUrl”),正如这篇颇受欢迎的文章中所描述的那样。变量$customerRedirectUrl表示一种逻辑,它一起可靠地创建了我知道我想要的页面的url。我的相关代码如下所示 public function r

我正在尝试在登录后将Magento中的特定用户重定向到products.html页面。我尝试这样做的每一种方式(setRedirect,header)都会由于重定向太多而导致循环

目前,我正在尝试使用一个观察者来设置参数('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()。

那我没有收到的帖子呢(作为一个新用户,我很有可能只是忘记了一些东西)?观察者在相对配置文件中的controller_action_postdispatch下进行布局,并位于观察者模型中。让setParam正确运行的上下文是什么


感谢所有人的帮助

当使用
$observer->getRequest()
实例化对象时遇到问题,请尝试改用
$observer->getEvent()->getFront()->getResponse()
。我相信这取决于观察者正在侦听的事件。

当您在使用
$observer->getRequest()
实例化对象时遇到问题,请尝试改用
$observer->getEvent()->getFront()->getResponse()
。我相信这取决于观测者正在收听的事件。

我知道这篇文章有点老了,但我知道它是为我自己的模块设计的

我在两个不同的事件上运行重定向。当客户注册或客户登录时

  <customer_register_success>
    <observers>
      <redirectAfterRegister>
        <class>businessdirectory/profile_observer</class>
        <method>redirectAfterRegister</method>
      </redirectAfterRegister>
    </observers>      
  </customer_register_success>
  <customer_login>
    <observers>
      <redirectAfterLogin>
        <class>businessdirectory/profile_observer</class>
        <method>redirectAfterLogin</method>
      </redirectAfterLogin>
    </observers>      
  </customer_login>     

我知道这篇文章有点老了,但我知道它是为我自己的一个模块设计的

我在两个不同的事件上运行重定向。当客户注册或客户登录时

  <customer_register_success>
    <observers>
      <redirectAfterRegister>
        <class>businessdirectory/profile_observer</class>
        <method>redirectAfterRegister</method>
      </redirectAfterRegister>
    </observers>      
  </customer_register_success>
  <customer_login>
    <observers>
      <redirectAfterLogin>
        <class>businessdirectory/profile_observer</class>
        <method>redirectAfterLogin</method>
      </redirectAfterLogin>
    </observers>      
  </customer_login>     

谢谢Francis,但是我得到了和以前一样的错误,有趣的是,在你的建议中调用的新方法没有一个失败。但是,是的,仍然是致命错误:对非对象调用成员函数setParam()。您可以尝试
var_dump($observer)
$var_dump($observer->getRequest())
等吗?嗯,var_dump($observer)返回许多不同的东西,但是var_dump($observer->getRequest())返回空值。谢谢Francis,但我得到的错误和以前一样,有趣的是,在你的建议中调用的新方法没有一个失败。但是,是的,仍然是致命的错误:对非对象调用成员函数setParam()。您可以尝试
var\u dump($observer)
$var\u dump($observer->getRequest())
等吗?嗯,var\u dump($observer)返回许多不同的东西,但是var\u dump($observer->getRequest())返回NULL。