Magento路由器:如何捕获所有URL中的参数?

5

想象一个小而基本的联盟系统。我想要一个像这样的URL:

www.myshop.com/mynewproduct.html?afid=123

每当 URL 中出现 afid,应该调用一个方法(主要是将“afid”保存在会话中,并在客户购买物品时进行跟踪)。
2个回答

20
你不需要路由器。你需要设置一个事件监听器,每次页面加载时触发该事件,并访问请求集合中的变量。`controller_front_init_routers` 事件应该可以做到这一点。
因此,请使用以下方式设置您的模块配置。
<global>
    <events>
        <controller_front_init_routers>
            <observers>
                <packagename_modulename_observer>
                    <type>singleton</type>
                    <class>Packagename_Modulename_Model_Observer</class>
                    <method>interceptMethod</method>
                </packagename_modulename_observer>
            </observers>
        </controller_front_init_routers>    
    </events>
</global>

然后创建以下类

app/code/local/Packagename/Modulename/Model/Observer.php
class Packagename_Modulename_Model_Observer {
    public function interceptMethod($observer) {
        $request    = $observer->getEvent()->getData('front')->getRequest();
        $afid       = $request->afid;

        //do whatever you want with your variable here
    }
}

interceptMethod可以随便命名。


1

我知道这是一个非常古老的答案,但是提到如果我们打算将这些参数存储在会话中,我们不应该使用controller_front_init_routers事件,这是原始问题的情况。例如,如果您在此时实例化customer/session,则将无法执行客户登录。Alan在http://alanstorm.com/magento_sessions_early中指出了这一点。顺便说一下,感谢Alan撰写这篇伟大的文章。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接