【问题标题】:How to invoke $customer->save() on a given event如何在给定事件上调用 $customer->save()
【发布时间】:2011-02-10 11:19:38
【问题描述】:

因此,我的任务是创建一个模块,以根据来自另一个系统的现有身份验证数据在 Magento 中登录/注册客户。我现在的想法是创建一个可以由管理员通过链接放置的小部件。那部分我已经想好了该怎么做。

下一部分是我可能需要一些帮助的地方。我已经阅读了足够多的文章来了解如何创建自定义 URL 结构以触发我的模块的操作,因此我假设我可以直接链接到我的操作、调用登录或注册请求并将用户发送回推荐页面(或他们的个人资料页面,我还没有完全指定项目,所以像这样的细节待定)。

这是我需要帮助的地方。我找到了通过登录和注册页面捕获 POST 请求的方法——我是否应该简单地扩展 Mage_Customer_AccountController 类并创建类似于 loginPostAction() 和 createPostAction() 方法中使用的调用的所需方法?

作为参考,我刚刚在新发布的 1.5.0.0 的全新安装上开始了一些初始项目开发 我指的文件是

/magento/app/code/core/Mage/Customer/controllers/AccountController.php

【问题讨论】:

    标签: php magento single-sign-on


    【解决方案1】:

    Magento 中所有基于事件的行为都应该在事件/观察者方法中处理(更多信息可以found here)....例如,在客户登录时调用您自己的操作将订阅 customer_login 或 customer_logout事件。如果您尝试订阅管理区域中的客户保存事件,它将是 adminhtml_customer_save_after 事件。 1.4.2 的完整列表可以是found here。

    另一个警告 - 重载控制器是我会谨慎做的事情。您尝试做的大部分事情都可以通过制作您自己的控制器并在提前获得功能后使用 Zend forward() 方法转发到您想要的控制器方法(您在 Mage_Customer_AccountController 中提到 loginPostAction())来完成。

    【讨论】:

    • 我不确定我是否完全理解您的意思。我正在尝试根据我自己的事件创建用户,而不是在 Magento 的传统用户流程中发生的事件。此外,我将传递一个身份验证令牌来创建我的用户,因此我需要绕过电子邮件确认步骤。所以你是说我应该创建一个新的控制器,它有一个创建用户的方法,然后从那里转发()进程?
    • 好吧,这更有意义。我刚刚使用名为 Gigya 的第 3 方社交登录服务做到了这一点。要点是使用您自己的控制器并扩展 Customer_AccountController 方法,这些方法允许您在自己的覆盖中填充诸如 return_url 之类的东西...一个提示是,当您想要保留会话信息时,您 必须 创建您自己的 Data.php 并在本地插件中定义会话命名空间。否则,当您 forward() 时,会话不会持续存在。祝你好运!
    • 你的 Gigya 项目成功了吗?该代码是偶然公开的吗?
    • 它在技术上仍处于开发阶段,代码未公开,但我现在已成为社交登录方面的专家 :) 这是一个很棒的系统,值得为精心策划的 API 付出每一分钱。
    猜你喜欢
    • 2019-10-09
    • 2013-06-15
    • 1970-01-01
    • 2023-01-07
    • 2012-02-27
    • 1970-01-01
    • 2013-07-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多