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);
    }

}

こんな感じで