index

2007年 7月
▽ 月 火 水 木 金 土 日
              1
  2 3 4 5 6 7 8
▷ 9 10 11 12 13 14 15
▷ 16 17 18 19 20 21 22
▷ 23 24 25 26 27 28 29
  30 31          
2007年 8月
▽ 月 火 水 木 金 土 日
      1 2 3 4 5
▷ 6 7 8 9 10 11 12
▷ 13 14 15 16 17 18 19
  20 21 22 23 24 25 26
▷ 27 28 29 30 31    
2007年 9月
▽ 月 火 水 木 金 土 日
▷           1 2
▷ 3 4 5 6 7 8 9
▷ 10 11 12 13 14 15 16
▷ 17 18 19 20 21 22 23
▷ 24 25 26 27 28 29 30

アレ

symfony のフォーム validate を YAML で書くと   ▽20070831a #プログラミング #PHP

なんかハマった,というか不可解だったのでメモ.

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

index