なんかハマった,というか不可解だったのでメモ.
Symfony でバリデーションを YAML で記述する時の文法について, まぁそれ以外についてと同様にどーもドキュメントが不足しているのだが, 検索してみると何やら 2通りのパターンがあるようなのね.
methods: [post] fillin: enabled: false fields: password: required: msg: パスワード 1 を入力してください。 password_confirm: required: msg: パスワード 2 を入力してください。 sfCompareValidator: check: password compare_error: パスワード 2 が一致していません。
↑こういうのと,
methods: post: - password1 - password2 fillin: enabled: false names: password1: required: true required_msg: パスワード 1 を入力してください。 password2: required: true required_msg: パスワード 2 を入力してください。 validators: [ passwordConfirmValidator ] passwordConfirmValidator: class: sfCompareValidator param: check: password1 compare_error: パスワード 2 が一致していません。
↑こういうの.
sfCompareValidator のあたりは明らかに前者の方が簡潔なんだけど, 混ぜると動かない.何なのコレw ていうかそもそも 2種類の記法があるってどうなの.
そもそも names と fields とかどう違うんだろう? 検索しても一般語すぎてちょっと見つけられなかったので, 仕方なくソース読んだら, sfValidatorConfigHandler.class.php に convertAlternate2Standard() というメソッドがあった.
どうやら fields キーが存在するか否かで, 存在したら Alternate フォーマット,しなければ Standard フォーマット, Alternate ならば Standard に変換するのがこのメソッドであるらしい.
検索すると Alternate で書かれた例が多い. 歴史は知らないが,おそらくこちらが先にあったフォーマットなんだろうな. で,fields の下のエレメント名の下に required と sfCompareValidator とが混ざる, つまり予約語とユーザ定義名が混ざるのが気持ち悪いとか, そういう理由もあって Standard フォーマットに移行したのではないかと.
たださー,公式ドキュメントまで Alternate フォーマットで書かれてるってのはどうなの. むしろこっちが Standard じゃんよー. しかも Alternate の方が書きやすい. Standard が Standard なのはタテマエで, 実はみんな Alternate を使ってたりするんだろーか?w