Zend_Filter_Input で filter に複数の field を渡す
- ZendFramework 1.7.5
<?php class My_Filter_Input extends Zend_Filter_Input { // 複数 fields の filter に対応。 // fields が array で指定された時は // filter メソッドに { field名 => value } の連想配列を渡す protected function _filterRule(array $filterRule) { $fields = $filterRule[self::FIELDS]; if (!is_array($fields)) return parent::_filterRule($filterRule); $data = array(); foreach ((array) $filterRule[self::FIELDS] as $field) { if (array_key_exists($field, $this->_data)) { $data[$field] = $this->_data[$field]; } else if (array_key_exists(self::DEFAULT_VALUE, $filterRule)) { if (is_array($filterRule[self::DEFAULT_VALUE])) { $key = array_search($field, (array) $filterRule[self::FIELDS]); if (array_key_exists($key, $filterRule[self::DEFAULT_VALUE])) { $data[$field] = $filterRule[self::DEFAULT_VALUE][$key]; } } else { $data[$field] = $filterRule[self::DEFAULT_VALUE]; } } } $this->_data[$filterRule[self::RULE]] = $filterRule[self::FILTER_CHAIN]->filter($data); } }
こんな感じで