bloggalleryaboutcontact

SymfonyのFormオブジェクトに対して後からバリデーションを追加したい

cakePHP的にさくっといけるかなーと思ったら割と面倒だった。

$this->formObj = new MessageForm();

とかやって最後に
$this->formObj->bind($param);

てな感じのとき、処理によっては追加でバリデーションを挟みたいなんてことがある。

で、こういう時にactionなりから呼びだす方法をあれこれ試してみて、

$validators = $this->formObj->getValidatorSchema()->getFields();

てな感じでバリデータ群を拾ってきてあげると

$validators['memo']->setOption('required', true);
$validators['memo']->setMessage('required', 'ここだけ必須。すんまそん。');


とか書くだけでいろいろいじれることが分かった。
minとかmaxとかがころころ変わる場合とか、bind前に追加のバリデーション設定をしとけばよし。
あとFormオブジェクトで日付を扱う場合は基本mktime()なりのミリ秒値をセットしてやったほうが後々便利。かな。

ついでに。入力値同士で比較したときなんかは
http://symfony.xrea.jp/1.1/forms_book/02-Form-Validation.html
の下のほうにある論理バリデータを使えばいい感じにPOSTデータ同士で比較できる。

symfonyのドキュメントって、なんでこうも少ないんですかね。
本もちらほら読んだけどいまいち十分じゃない。むー。
とりあえずお作法的なところだけでもかっちりしたものが欲しいんだけど。
Comments (0)  Permalink

Comments

add a comment

This blog is gravatar enabled.
Your email adress will never be published.
Comment spam will be deleted!

Name*
E-Mail
For Spammers Only
URL
Comment*
Notify me via E-Mail when new comments are made to this entry
Remember me (needs cookies)