sfDoctrineGuard default_from_email

时间:2012-04-13 04:04:13

标签: symfony-1.4 forgot-password sfdoctrineguard

我有一个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,这不是正确的方法(虽然它有效),但我需要快速修复。

2 个答案:

答案 0 :(得分:2)

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

  • 在您的apps / modules文件夹中创建一个名为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
  }
}

答案 1 :(得分: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的答案是你最好的选择,尽管有一些开销。您必须将所有方法从原始版本复制到自定义版本。这意味着如果有升级,您将必须复制它们以确保您获得任何更改。