1

ドメイン名に基づいて単一のSymfonyプロジェクトからさまざまなサイトコンテンツを動的にロードするために使用されるSymfony1.4システムがあります。このシステムにはバックエンドがあり、バックエンドには「パスワードを忘れた」機能が1つの問題でうまく機能しています。送信元のメールは、apps / backend / config/app.ymlに次のように設定されています。

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

しかし、私は1つだけではなく複数のドメインを持っています。

私のDBにはドメイン名を保存しましたが、コントローラーには現在のドメイン名を取得し、DBにクエリを実行してから、指定されたドメインのテーブルIDであるsid(site_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のデフォルトの処理をオーバーライドできます。

  • sfGuardForgotPasswordapps/modulesフォルダーに呼び出される新しいモジュールを作成します
  • と呼ばれる新しいフォルダを作成します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 ?>

しかし、作成された直後に値を設定したにもかかわらずsfContext::getInstance()(ただし、ディスパッチされていない)、「noreply @」を取得し続けたため、これはテストでは機能しないようです。カスタムフィルターを追加しようとしましたが、Symfonyはプロジェクトの構成中に最初にすべてのyamlファイルを取得してから、ディスパッチ呼び出しを行うようです。

したがって、オーバーヘッドはありますが、j0kの答えが最善の策だと思います。すべてのメソッドを元のバージョンからカスタムバージョンにコピーする必要があります。つまり、アップグレードがある場合は、変更を確実に取得するためにそれらをコピーする必要があります。

于 2012-04-13T20:22:02.013 に答える