1

我有一个 Symfony 1.4 系统,用于根据域名从单个 Symfony 项目动态加载不同的站点内容。该系统有一个后端,在后端我的“忘记密码”功能运行良好,有 1 个问题。它发送的电子邮件在 apps/backend/config/app.yml 中设置,设置如下:

all:
  sf_guard_plugin:
    routes_register: true
    default_from_email: noReply@domain.com

但我有多个域,而不仅仅是一个。

在我的数据库中,我存储了域名,我的控制器具有获取当前域名的逻辑,查询数据库,然后保存 sid (site_id) 的会话属性,它是给定域的表 id。

我想要做的是能够将 default_from_email 设置为当前域。

i.e. noReply@domain1.com or noReply@domain2.com 

取决于最终用户用于访问该站点的域。我的问题是..有没有办法

app.yml file to put a variable %domain% 

然后在 sfDoctrineGuardPlugin 中填充与忘记密码功能相关的某处或是否有办法覆盖 sfDoctrineGuardPlugin sfGuardForgotPassword 模块以插入逻辑以使用当前域作为发件人电子邮件

目前我的解决方案是将逻辑插入到 BasesfGuardForgotPasswordActions.class.php 中,这不是正确的方法(尽管它有效),但我需要快速修复。

4

2 回答 2

2

当然,您可以覆盖 sfGuardForgotPassword 的默认处理:

  • 创建一个名为的新模块sfGuardForgotPassword在您的应用程序/模块文件夹中
  • 创建一个名为的新文件夹actions
  • actions.class.php在里面创建一个文件

actions.class.php

<?php 
require_once(sfConfig::get('sf_plugins_dir').'/sfDoctrineGuardPlugin/modules/sfGuardForgotPassword/lib/BasesfGuardForgotPasswordActions.class.php');

/**
 *
 * @package    symfony
 * @subpackage plugin
 * @author     Fabien Potencier <fabien.potencier@symfony-project.com>
 * @version    SVN: $Id: actions.class.php 23319 2009-10-25 12:22:23Z Kris.Wallsmith $
 */
class sfGuardForgotPasswordActions extends BasesfGuardForgotPasswordActions
{
  protected function sendRequestMail($user, $forgotPassword)
  {
    // send the mail as you want
  }

  protected function sendChangeMail($user, $password)
  {
    // send the mail as you want
  }
}
于 2012-04-13T06:26:52.757 回答
0

不确定你是否知道,但你可以在 yaml 文件中包含 PHP 代码,symfony 会解析 php 代码,所以我想你可以这样做:

all:
  sf_guard_plugin:
    default_from_email: noreply@<?php echo sfConfig::get('domain') . PHP_EOL ?>

但这在我的测试中似乎不起作用,因为我一直得到'noreply@',即使我在sfContext::getInstance()创建后立即设置了值(但没有分派)。我什至尝试为它添加一个自定义过滤器,但看起来 Symfony 会在项目配置期间首先获取所有 yaml 文件,然后进行调度调用。

所以我认为 j0k 的答案是你最好的选择,尽管有一些开销。您必须将所有方法从原始版本复制到您的自定义版本。这意味着如果有升级,您将必须复制它们以确保您获得任何更改。

于 2012-04-13T20:22:02.013 回答