一人もくもく会 α verでサービス開始しました。
請求書作成システム α verでサービス開始しました。

CakePHP3でEmailのfromの共通設定をDBで指定する

CakePHP3はapp.phpにてメール送信のfromのデフォルトを簡単に設定できる。

固定ならそれで問題ないのだが、問題はDBの設定でfromを指定したい場合。

bootstrap.phpを見てみると、app.phpの設定はConfigure::consumeで削り取られており、 あとでConfigure::writeをしてもfromを動的に反映させることができない。 Emailのクラスを見ても設定できる方法はない。

しかしよく見ると、EmailにはStaticConfigTraitが使用されている。 これを利用することでfromのデフォルトを動的に指定することができる。 下記のようなコードをアプリケーションの共通処理で行っておけば良い。

$keys = Email::configured();
foreach ($keys as $key) {
    $emailConfig = Email::config($key);
    $emailConfig['from'] = $config->from_setting;
    Email::drop($key);
    Email::config($key, $emailConfig);
}

設定は変更できないので、丸々入れ替える形。