当問題、以下の内容で解決しました。
oil generateとバリデーションエラーメッセージの件について報告。
http://madroom-project.blogspot.jp/2012/06/oil-generate.html
--
ちょっと前に以下のエントリを書きましたが、より良いと思われる方法を思いつきました。
FuelPHPのScaffold(admin)と、バリデーションエラーメッセージのエスケープ問題の対応策。(応急処置。)
http://madroom-project.blogspot.jp/2012/06/fuelphpscaffoldadmin.html
根本的に解決するには、例えば以下のような修正が必要と思われます。
diff --git a/fuel/core/classes/validation.php b/fuel/core/classes/validation.php index a09c30e..80abcac 100644 --- a/fuel/core/classes/validation.php +++ b/fuel/core/classes/validation.php @@ -565,6 +565,37 @@ class Validation } /** + * Get errors + * + * Returns all errors in array + * + * @param array uses keys message_prefix + * @return array + */ + public function get_errors($options = array()) + { + $default = array( + 'message_prefix' => \Config::get('validation.message_prefix', '* '), + ); + $options = array_merge($default, $options); + + if (empty($this->errors)) + { + return array(); + } + + $array = array(); + + foreach($this->errors as $e) + { + $array[] = $options['message_prefix'].$e->get_message(); + } + + return $array; + } + + /** * Alias for $this->fieldset->add() * * @return Fieldset_Field diff --git a/fuel/packages/oil/views/admin/crud/actions/create.php b/fuel/packages/oil/views/admin/crud/actions/create.php index a28517e..3172c4a 100644 --- a/fuel/packages/oil/views/admin/crud/actions/create.php +++ b/fuel/packages/oil/views/admin/crud/actions/create.php @@ -22,7 +22,7 @@ } else { - Session::set_flash('error', $val->show_errors()); + Session::set_flash('error', $val->get_errors()); } } diff --git a/fuel/packages/oil/views/admin/crud/actions/edit.php b/fuel/packages/oil/views/admin/crud/actions/edit.php index 2d6bad7..3f5c33e 100644 --- a/fuel/packages/oil/views/admin/crud/actions/edit.php +++ b/fuel/packages/oil/views/admin/crud/actions/edit.php @@ -22,7 +22,7 @@ } else { - Session::set_flash('error', $val->show_errors()); + Session::set_flash('error', $val->get_errors()); } } diff --git a/fuel/packages/oil/views/admin/orm/actions/create.php b/fuel/packages/oil/views/admin/orm/actions/create.php index c785673..b24faa0 100644 --- a/fuel/packages/oil/views/admin/orm/actions/create.php +++ b/fuel/packages/oil/views/admin/orm/actions/create.php @@ -24,7 +24,7 @@ } else { - Session::set_flash('error', $val->show_errors()); + Session::set_flash('error', $val->get_errors()); } } diff --git a/fuel/packages/oil/views/admin/orm/actions/edit.php b/fuel/packages/oil/views/admin/orm/actions/edit.php index 8b5362b..7f8635f 100644 --- a/fuel/packages/oil/views/admin/orm/actions/edit.php +++ b/fuel/packages/oil/views/admin/orm/actions/edit.php @@ -28,7 +28,7 @@ $<?php echo $singular_name; ?>-><?php echo $field['name']; ?> = $val->validated('<?php echo $field['name']; ?>'); <?php endforeach; ?> - Session::set_flash('error', $val->show_errors()); + Session::set_flash('error', $val->get_errors()); } $this->template->set_global('<?php echo $singular_name; ?>', $<?php echo $singular_name; ?>, false); diff --git a/fuel/packages/oil/views/scaffolding/crud/actions/create.php b/fuel/packages/oil/views/scaffolding/crud/actions/create.php index a28517e..3172c4a 100644 --- a/fuel/packages/oil/views/scaffolding/crud/actions/create.php +++ b/fuel/packages/oil/views/scaffolding/crud/actions/create.php @@ -22,7 +22,7 @@ } else { - Session::set_flash('error', $val->show_errors()); + Session::set_flash('error', $val->get_errors()); } } diff --git a/fuel/packages/oil/views/scaffolding/crud/actions/edit.php b/fuel/packages/oil/views/scaffolding/crud/actions/edit.php index d73e196..7fd5c83 100644 --- a/fuel/packages/oil/views/scaffolding/crud/actions/edit.php +++ b/fuel/packages/oil/views/scaffolding/crud/actions/edit.php @@ -24,7 +24,7 @@ } else { - Session::set_flash('error', $val->show_errors()); + Session::set_flash('error', $val->get_errors()); } } diff --git a/fuel/packages/oil/views/scaffolding/orm/actions/create.php b/fuel/packages/oil/views/scaffolding/orm/actions/create.php index c785673..b24faa0 100644 --- a/fuel/packages/oil/views/scaffolding/orm/actions/create.php +++ b/fuel/packages/oil/views/scaffolding/orm/actions/create.php @@ -24,7 +24,7 @@ } else { - Session::set_flash('error', $val->show_errors()); + Session::set_flash('error', $val->get_errors()); } } diff --git a/fuel/packages/oil/views/scaffolding/orm/actions/edit.php b/fuel/packages/oil/views/scaffolding/orm/actions/edit.php index fb2ecb5..a52c292 100644 --- a/fuel/packages/oil/views/scaffolding/orm/actions/edit.php +++ b/fuel/packages/oil/views/scaffolding/orm/actions/edit.php @@ -31,7 +31,7 @@ $<?php echo $singular_name; ?>-><?php echo $field['name']; ?> = $val->validated('<?php echo $field['name']; ?>'); <?php endforeach; ?> - Session::set_flash('error', $val->show_errors()); + Session::set_flash('error', $val->get_errors()); } $this->template->set_global('<?php echo $singular_name; ?>', $<?php echo $singular_name; ?>, false); diff --git a/fuel/packages/oil/views/scaffolding/template.php b/fuel/packages/oil/views/scaffolding/template.php index 610f3be..f952932 100644 --- a/fuel/packages/oil/views/scaffolding/template.php +++ b/fuel/packages/oil/views/scaffolding/template.php @@ -17,14 +17,14 @@ <?php if (Session::get_flash('success')): ?> <div class="alert-message success"> <p> - <?php echo implode('</p><p>', (array) Session::get_flash('success')); ?> + <?php echo implode('</p><p>', e((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>', (array) Session::get_flash('error')); ?> + <?php echo implode('</p><p>', e((array) Session::get_flash('error'))); ?> </p> </div> <?php endif; ?>* fuel/packages/oil/views/scaffolding/template.phpは、admin側と処理を同じにしておいた方が良いかな。程度です。必須では無いです。
ただし、上記はcoreの修正になるので、本家にpull requestしてマージしてもらわない限り、手出ししにくいのが本音です。
app側のみで対応するには、Validationクラスを同一名で継承、置換。上記のget_errors関数のみ書きます。
細かな方法は、以下を参考にして下さい。
FuelPHPのcoreクラスを拡張してみる。
http://madroom-project.blogspot.jp/2011/12/fuelphpcore.html
加えて、以下の修正が必要です。
scaffoldされたコントローラの
Session::set_flash('error', $val->show_errors());
を
Session::set_flash('error', $val->get_errors());
に変更。
No comments:
Post a Comment