0

電子メールを送信する必要があるモジュールを作成し、その getServiceConfig にファクトリとしてメール サービスを作成しました。十分に単純です。

$transport = $this->getServiceLocator()->get('custom_module_mail_transport');
// use transport

Module.php で:

          'custom_module_mail_transport' => function($instance, $sm) {
                $b    = new \Zend\Mail\Transport\Smtp();
                $b->setOptions(
                    new \Zend\Mail\Transport\SmtpOptions(
                        array(
                            'host'              => 'smtp.isp.com',
                            'connection_class'  => 'login',
                            'port'              => 25,
                            'connection_config' => array(
                                'username' => 'abc',
                                'password' => 'def',
                            )
                        )
                    )
                );
                return $b;
            },

カスタムモジュールのメールトランスポート用に独自のファクトリを実装して、人々が自分でロールバックできるようにしたいと思います。つまり、構成を使用してパスワードなどを取得できますが、トランスポートが多すぎると面白くなくなります。

「custom_module_mail_transport」ファクトリをアプリケーションレベルのサービス構成に追加してもうまくいかないようです。目標は、ユーザーが独自のファクトリをロールして、モジュールが提供するファクトリをオーバーライドできるようにすることです。

これを行う最善の方法は何ですか?

ZF2 について頭を悩ませるのを手伝ってくれてありがとう。

4

1 に答える 1

2

コメントを回答に変換して、他のユーザーが (上/下) 投票/改善できるようにします。

誰かがより良い解決策を持っているかもしれませんが、期待する共通のインターフェースを実装するユーザー定義のクラス型を可能にするファクトリを使用できると思います。

メタ概要で申し訳ありませんが、ユーザーは次のことができます。

  • モジュール固有の構成で、「custom_module_mail_transport_class」=>「FQD\Of\My_Mail_Transport」の値を構成します
  • サービス ロケーターは、次のファクトリを使用できます。
    • ユーザーの class_exists があるかどうかを確認します
    • を作成しますnew $passed_module_config['custom_module_mail_transport_class']()
    • タイプチェックinstanceof mailtransport_interface(または名前を付けてもよいもの)
    • 正しい実装でない場合は、標準クラスを作成するか、例外を生成します。

しかし、私はまだ ZF2 をあまり扱っていません。

于 2013-07-09T18:27:30.887 に答える