3.6では発生して3.4では発生しない理由¶
form の action 属性値に与えられる url を生成する部分で 3.4 と 3.6 に違いが発生している.
具体的には以下の部分である.
3.4 の apps/pc_frontend/templates/_partsForm.php
3 $options->setDefault('url', url_for(sfContext::getInstance()->getRouting()->getCurrentInternalUri()));
...
14 <form action="<?php echo $options->getRaw('url') ?>" method="<?php echo $options['method'] ?>"<?php if (!empty($options['isMultipart'])): ?> enctype="multipart/form-data"<?php endif; ?>>
3.6 の apps/pc_frontend/templates/_partsForm.php
7 $options->setDefault('url', $sf_request->getCurrentUri());
...
13 <form action="<?php echo $options->getRaw('url') ?>" method="<?php echo $options['method'] ?>"<?php if (!empty($options['isMultipart'])): ?> enctype="multipart/form-data"<?php endif; ?>>
3.4 で用いている sfContext::getInstance()->getRouting()->getCurrentInternalUri() では頭に付いている // の部分が省かれて取得され,正常に動作する.
しかし 3.6 の場合は $sf_request->getCurrentUri() では // が付与されたまま action 属性として表示してしまうため本チケットの問題が発生する.
問題発生場所¶
この修正は以下のチケットおよびコミットで変更されている.
#1004 「[Optimization] Decrease generating url by default rule (:module/:action) (デフォルトルール (:module/:action) による URL 生成を減らす)」
e8e250952e1dfaab11b0aceb7119a7afd968ff31
commit e8e250952e1dfaab11b0aceb7119a7afd968ff31
Author: Kousuke Ebihara <ebihara@tejimaya.com>
Date: Mon May 10 18:47:48 2010 +0900
there are wrong fetching current URL with parameters in default value of parts (fixes #1004)
diff --git a/apps/pc_frontend/templates/_partsForm.php b/apps/pc_frontend/templates/_partsForm.php
index 5afa4d2..dbac137 100644
--- a/apps/pc_frontend/templates/_partsForm.php
+++ b/apps/pc_frontend/templates/_partsForm.php
@@ -4,10 +4,7 @@ $options->setDefault('method','post');
$options->setDefault('firstRow', '');
$options->setDefault('lastRow', '');
$options->setDefault('mark_required_field', true);
-if (!isset($options['url']))
-{
- $options->setDefault('url', url_for(sfContext::getInstance()->getRouting()->getCurrentInternalUri()));
-}
+$options->setDefault('url', $sf_request->getCurrentUri());
?>
<?php if ($options['form'] instanceof opAuthRegisterForm): ?>
<?php echo $options['form']->renderFormTag($options['url'], array('method' => $options['method'])) ?>
対応すべきかどうか¶
3.4 では #1004 は Enhancement であるため対応することは考えられない.
そのため本問題は発生しないと考えられ,Invalid とすることが正しいと判断できる.