在验证中使用Zend_Form输入

时间:2011-01-05 15:23:07

标签: zend-framework csv zend-form

我有一张上传CSV文件的表单。它要求分隔符和CSV文件:

public function init()
    {
        $this->setName('UploadCsvForm');

        $delimiter = new Zend_Form_Element_Text('delimiter');
        $delimiter->setLabel('Delimiter')
                  ->setValue(',')
                  ->setAttrib('size', 2);

        $csv = new Zend_Form_Element_File('csvFile');
        $csv->setLabel(
            'Pick a CSV file to upload')
            ->setRequired(true)
            ->addValidator('Count', false, 1)
            ->addValidator('Extension', false, 'csv')
            ->addValidator('Size', false, 102400)
            ->setDestination('/tmp');

        $submit = new Zend_Form_Element_Submit('submit');
        $submit->setLabel('Upload bestand');

        $this->addElements(array($delimiter, $csv, $submit));
    }

我有一个自定义CSV验证文件,它扩展了Zend_Validate_Abstract。它有效,但我希望能够用它来验证我输入的表格CSV文件。 我可以添加这样的东西,但由于$ delimiter尚未设置,它将无效。

->addValidator(new Custom_Validate_Csv(array('name', 'postcode'), $delimiterString), false)

有什么想法吗? 感谢。

1 个答案:

答案 0 :(得分:2)

Zend_Form在其元素上调用isValid()时,它会传递第二个参数$context,其中包含所有表单值。

因此,在您的自定义验证程序中,isValid()方法应如下所示:

public function isValid($value, $context)
{
     $delimiter = $context['delimiter'];

     // continue with your validation using the delimeter
     // ...
}