June 6, 2012

FuelPHPのScaffold(admin)と、バリデーションエラーメッセージのエスケープ問題の対応策。(応急処置。)

2012/06/07 追記。
より良さそうな対策を思いついたので、以下に書きました。

FuelPHPのScaffold(admin)と、バリデーションエラーメッセージのエスケープ問題の対応策。最善(?)策。
http://madroom-project.blogspot.jp/2012/06/fuelphpscaffoldadmin_08.html

--

昨日の、以下のエントリについてです。

FuelPHPのScaffoldと、バリデーションエラーメッセージのエスケープに関して。
http://madroom-project.blogspot.jp/2012/06/fuelphpscaffold.html

まず、oil g scaffold ... の場合、この問題は発生しません。
(とはいっても、cssのスタイルが正しく適用されないはずです。)
oil g admin ... の場合に、この問題は発生します。

エラーメッセージがエスケープされずに、なおかつcssのスタイルを正しく適用させるために
とりあえず、以下の修正をしてみました。

* fuel/packages/oil/views/admin/template.php
ちなみに/fuel/packages/oil/views/scaffolding/template.phpはもともと以下の形で、
e()を通していません。
 <?php if (Session::get_flash('success')): ?>
                 <div class="alert-message success">
                     <p>
-                    <?php echo implode('</p><p>', e((array) Session::get_flash('success'))); ?>
+                    <?php echo implode('</p><p>', (array) Session::get_flash('success')); ?>
                     </p>
                 </div>
 <?php endif; ?>
 <?php if (Session::get_flash('error')): ?>
                 <div class="alert-message error">
                     <p>
-                    <?php echo implode('</p><p>', e((array) Session::get_flash('error'))); ?>
+                    <?php echo implode('</p><p>', (array) Session::get_flash('error')); ?>
                     </p>
                 </div>
 <?php endif; ?>


* fuel/core/classes/validation.php
     public function show_errors($options = array())
     {
         $default = array(
-            'open_list'    => \Config::get('validation.open_list', '<ul>'),
-            'close_list'   => \Config::get('validation.close_list', '</ul>'),
-            'open_error'   => \Config::get('validation.open_error', '<li>'),
-            'close_error'  => \Config::get('validation.close_error', '</li>'),
+            'open_list'    => \Config::get('validation.open_list', ''),
+            'close_list'   => \Config::get('validation.close_list', ''),
+            'open_error'   => \Config::get('validation.open_error', '* '),
+            'close_error'  => \Config::get('validation.close_error', '<br />'),
             'no_errors'    => \Config::get('validation.no_errors', '')
         );
         $options = array_merge($default, $options);
とりあえずこの形で、普通に表示されました。
後は、ベストな形の模索。。。
fuel/core/classes/validation.phpの方はコンフィグファイルで対応する方が良いのかな。
とりあえずミニマムと思われる内容で。

No comments:

Post a Comment