【问题标题】:Zend_Form validator input filterZend_Form 验证器输入过滤器
【发布时间】:2013-06-12 23:39:52
【问题描述】:

在我的应用程序库中,我有使用 Zend_Form (ZF 1.*) 的输入过滤器

class My_InputFilter extends Zend_Form
{
    public function init()
    {
        $this->addElement(
            'text', 'dateFrom', array(
                'required' => true,
                'filters' => array(
                    'dateTimeTotimeStamp'
                ),
                'validators' => array(
                    array('date', false, array('format' => 'Y-m-d H:i:s'))
                )
            )
        );
    }
}

然后在我的应用程序中,我想以时间戳格式获取经过验证的数据:

$inputFilter = new My_InputFilter();
if (!$inputFilter->isValid($criteria)) {
    throw new InvalidArgumentException(
        $this->simplifyInputFilterErrorMessages($inputFilter->getMessages())
    );
} else {
    $validatedCriteria = $inputFilter->getValues(); // Array with my timestamp date
}

在哪里实现 'dateTimeTotimeStamp'(示例名称)strtotime() 过滤器以获取 UNIX 时间戳格式的经过验证和过滤的日期?

【问题讨论】:

    标签: php zend-framework zend-form


    【解决方案1】:

    如果您不想创建单独的过滤器,请使用Zend_Filter_Callback

    例子:

    $this->addElement($this
        ->createElement('text', 'dateFrom')
        ->addFilter(new Zend_Filter_Callback(function($value){
            return strtotime($value);
        })));
    

    在验证期间和通过 getValue() 检索元素值时都会发生过滤:

    【讨论】: