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種類の記法があるってどうなの.

そもそも namesfields とかどう違うんだろう?  検索しても一般語すぎてちょっと見つけられなかったので, 仕方なくソース読んだら, sfValidatorConfigHandler.class.phpconvertAlternate2Standard() というメソッドがあった.

どうやら fields キーが存在するか否かで, 存在したら Alternate フォーマット,しなければ Standard フォーマット, Alternate ならば Standard に変換するのがこのメソッドであるらしい.

検索すると Alternate で書かれた例が多い. 歴史は知らないが,おそらくこちらが先にあったフォーマットなんだろうな. で,fields の下のエレメント名の下に requiredsfCompareValidator とが混ざる, つまり予約語とユーザ定義名が混ざるのが気持ち悪いとか, そういう理由もあって Standard フォーマットに移行したのではないかと.

たださー,公式ドキュメントまで Alternate フォーマットで書かれてるってのはどうなの. むしろこっちが Standard じゃんよー. しかも Alternate の方が書きやすい. Standard が Standard なのはタテマエで, 実はみんな Alternate を使ってたりするんだろーか?w

index