Backport(バックポート) #2725
Yuya Watanabe さんがほぼ13年前に更新
h3. Overview (現象) config/OpenPNE.yml で80番以外のポート番号を含むURLをbase_urlに指定した場合、通知メール等に含まれるURLにポート番号が反映されない h3. Environment (再現バージョン) OpenPNE3.6beta8 h3. Way to repro (再現手順) # config/OpenPNE.yml で80番以外のポート番号を含むURLをbase_urlに指定 # 招待メールを送ってみる # 招待状本文中の「〜〜SNS に参加する」URLのリンクにポート番号が含まれない 例:<pre> base_url: "http://sns.openpne.jp:8080" </pre>→<pre> ... ■ ××××SNS に参加する http://sns.openpne.jp/member/register/token/xyxyxyxyxyxyxyxy ... </pre> h3. Causes (原因) parse_url(sfConfig::get('op_base_url')) の戻り値配列に含まれる port が使われていない h3. Way to fix (修正内容) * parse_url() の戻り値配列に含まれる port を保持。 を保持。(lib/config/opApplicationConfiguration.class.php) * sfPatternRoutingを継承したクラス opPatternRouting で修正。symfony側(sfRouting)には手をつけない。 <pre> 修正パッチ: https://github.com/tozuka/OpenPNE3/commit/1da0e7306a7815a8502f7524a6b26f1436096bd7 h3. 備考 config/OpenPNE.yml.sample のように<pre> diff --git a/lib/config/opApplicationConfiguration.class.php b/lib/config/opApplicationConfiguration.class.php base_url: "http://example.com" index f1e8d92..cd29665 100644 --- a/lib/config/opApplicationConfiguration.class.php +++ b/lib/config/opApplicationConfiguration.class.php @@ -598,6 +598,10 @@ abstract class opApplicationConfiguration extends sfApplicationConfiguration if (isset($parts['host'])) { $options['context']['host'] = $parts['host']; + if (isset($parts['port'])) + { + $options['context']['host'] .= ':'.$parts['port']; + } } } else </pre> </pre>が指定されていると、実際のリクエストからURLをポート番号込みで読み取って絶対URLを生成してくれる実装になっているが、op_base_url までは書き換えてくれないのでメールのフッタには http://example.com と表示される。