フォーム定義のフィルタを追加する方法
PHPでtrim+全角スペースを取り除く時のベンチマークを取って見た をEthnaに組み込んでみた。
組み込み済みのフィルタはどこに定義されているかというと。
以下のように定義されている。
Ethna/class/Ethna_ActionForm.php L1025〜
<?php ・・・ /** * フォーム値に変換フィルタを適用する * * @access private * @param mixed $value フォーム値 * @param int $filter フィルタ定義 * @return mixed 変換結果 */ function _filter($value, $filter) { if (is_null($filter)) { return $value; } foreach (preg_split('/\s*,\s*/', $filter) as $f) { $method = sprintf('_filter_%s', $f); if (method_exists($this, $method) == false) { $this->logger->log(LOG_WARNING, 'filter method is not defined [%s]', $method); continue; } $value = $this->$method($value); } return $value; } /** * フォーム値変換フィルタ: 全角英数字->半角英数字 * * @access protected * @param mixed $value フォーム値 * @return mixed 変換結果 */ function _filter_alnum_zentohan($value) { return mb_convert_kana($value, "a"); } ・・・
$this([PROJECT_ID]_Action_Formクラス)の _filter_[フォームにて指定されているフィルタ名]というルールにて記載されている。
なので、[PROJECT_ID]/app/直下の[PROJECT_ID]_ActionForm.phpにて以下のようにカスタムフィルタの定義をしてやればよい。
<?php class [PROJECT_ID]_ActionForm extends Ethna_ActionForm { ・・・・ /* @custom filter defined */ /** * フォーム値変換フィルタ: 全角スペースを半角スペースに変換してtrimしる。 * * @access protected * @param mixed $value フォーム値 * @return mixed 変換結果 */ protected function _filter_mb_trim( $value) { return trim( mb_convert_kana( $value, "s")); }
これで、あとは通常のフィルタと同様にフォーム定義内の'filter'にて'mb_trim'と指定してあげればいい。
簡単〜♪