#navi_header|PHP| HTML_QuickForm::addRule()の引数で一部不明なのがありましたので、ちょっとハックしてみました。 形式 : void addRule( string $element, string $message, string $type, [string $format = null], [string $validation = 'server'], [boolean $reset = false], [boolean $force = false]) 中身: | string | $element | Form element name | | string | $message | Message to display for invalid data | | string | $type | Rule type, use getRegisteredRules() to get types | | string | $format | (optional)Required for extra rule data | | string | $validation | (optional)Where to perform validation: "server", "client" | | boolean | $reset | Client-side validation: reset the form element &br() to its original value if there is an error? | | boolean | $force | Force the rule to be applied, &br() even if the target form element does not exist | $element, $message, $type, $validation, $reset, $forceまでは、まあ、英語の解説でわかるんですよ。 '' 問題は $format 引数。 '' HTML_QuickForm::addRule()をハックしてみると、 $this->_rules[$element][] = array( 'type' => $type, 'format' => $format, 'message' => $message, 'validation' => $validation, 'reset' => $reset, 'dependent' => $dependent ); みたくなってて、内部の$_rules[]に連想配列でセットされてます。んで、これが使われているところはメインはHTML_QuickForm::validate()なのでちょっと調べてみます。 function validate() { ... $registry =& HTML_QuickForm_RuleRegistry::singleton(); ... $result = $registry->validate( $rule['type'], $submitValue, $rule['format'], ...); のように使われてました((ちなみにformatの後の...は、$rules['howmany']がセットされていればtrue, いなければfalseで、これはHTML_QuickForm_RuleRegistryのvalidate()のmultipleに影響します。))。 結構後の方まで引きずってます。んで、HTML_QuickForm_RuleRegistryというのは、結局Ruleの統合インターフェイスですな。シングルトンですから、ぶっちゃけファクトリーみたいなもんです。中身は。 んで、それのvalidateを調べてみます。 function validate($ruleName, $values, $options = null, $multiple = false) { ... $rule =& $this->getRule($ruleName); ... return $rule->validate($values, $options); } | HTML_QuickForm::validate() | HTML_QuickForm_RuleRegistry::validate() |H | $rule['type'] | $ruleName | | $submitValue | $values | | $rule['format'] | $options | | 注((is_array($submitValue) && !isset($rule['howmany'])の場合true, でなければfalse)) | $multiple | えーっとですね・・・ちょっと疲れてきましたが。 getRuleっつーのはあれですな、Validation系クラスのFactroyデザインパターンのインターフェイスです。ですから結局のところ、Rule/ディレクトリ以下の各クラスのvalidate()メソッドが呼び出されるわけです。最終的に・・・ | HTML_QuickForm | HTML_QuickForm_RuleRegistry | 各Ruleクラス |H | $submitValue | $values((配列の場合はforeachで分解される)) | $value | | $format | $options | $option | みたく受け渡されていきます。 &size(20px){ ・・・$formatという引数名、おかしくない?・・・ } 素直に$optionsとか、$rule_paramsとかつけてくれてればもうちょっとわかりやすいのに。 ちなみに、HTML_QuickFormのパッケージではRule/以下は次のファイルしかありません。 - Callback.php - Compare.php - Email.php - Range.php - Regex.php - Required.php このうち、少なくともCallback.phpとRegex.phpで$optionが、ひいては$format引数が使用されています。たとえばCallback.phpでしたら、コールバック関数(call_user_func)に唯一PHPスクリプトからプログラマーが渡せる引数として利用されていますし、Regex.phpでは同様で、内部で分岐こそしていますが、基本的にはpreg_matchに渡す正規表現として使用されています。 #navi_footer|PHP|