ASKEET チュートリアル バリデーション、sfView

ichikawa です。
ここで以前にもvalidationの記事を書いたのですが、もうvalidationを実行したときの流れも知っておきあたかったのでまた書きます。

以前の記事

フォームから送られてきたリクエストにバリデーションをかける際、
myModule/validate/myAction.yml を作成し、エラーがあった場合の処理を actions.class.php内に handleErrorMyAction としてメソッドを書くことは学びました。
その先がどうなっているのかなかなか複雑そうなので、調べてみました。

送られたリクエストがバリデーションでのチェックに引っかからなかった場合
actions.class.php の executeMyAction メソッドを実行、myActionSuccess.php テンプレートが呼び出されます。
送られたリクエストがバリデーションでのチェックに引っかかった場合(エラーの場合)
actions.class.php の handleErrorMyAction メソッドを実行しますが、この後、デフォルトでは myActionError.php を出力します。前回の記事では、エラーが生じた場合にも loginSuccess.php テンプレートを表示したかったので、handleErrorLogin メソッドの最後に return sfView::SUCCESS; と入力したのでした。
また、 handleErrorMyAction メソッドが存在しない場合も、myActionError.phpを出力します。それもない場合は、サーバーエラーの画面が表示されます。
エラーメッセージを表示
テンプレートが呼び出されれば、そこでエラーメッセージを表示させるためには、validationヘルパ関数を使うと楽にできます。
前回使ったのは form_error(’パラメータ名’) ですがこれはとても便利で、エラーがあったときだけ表示できる優れものです。しかしこれは一つ一つエラーメッセージを呼び出すには良いかもしれませんが、
エラーがたくさんあって、全部出力したい時には $sf_reqest を使った下のような書き方がスマートかもしれません。

//エラーがあるかチェック
<?php if ($sf_request->hasErrors()):?>
//エラーをリストにして表示
<ul> <?php $errors = $sf_request->getErrors();?>
<?php foreach ($errors as $error):?>
<li> <?php echo $error;?></li>
</ul>
<?php endforeach; ?>

以上がバリデーションを行うことの大体の流れです。途中の sfView::SUCCESS が気になったのでこちらもちょいと調べてみました。
sfView クラスはどこにあるのかなと、探ってみたところ symfony のsymfony/view/にありました、sfView.class.php。

ここで送られてきた文字列を定数を定義しているところです。
sfView::ALART とか sfView::INPUT とかあるみたいですが、これらは sfView::SUCCESS を返す時と同じことで、これらを返すと myActionAlart.php や myActionInput.php テンプレートを探して表示するようです。

handleErrorMyAction メソッドでは何も指定しないと myActionError.phpを表示しようとするのは、デフォルトで sfView::ERROR を返しているのですね。
と考えると executeMyAction では sfView::SUCCESS を返しているのです。

なるほど。
symfony自体に組み込まれているクラスやヘルパは、ソースを見る事でどんなものか理解するのに良い方法だと思いました。
これからも、どういう仕組みか分からないときは、ソースを追ってみて理解していみようということにしました。

コメントをどうぞ

名前: (Required)

eMail: (Required)

Website:

Comment:

Spam Protection by WP-SpamFree