2011-01-05 52 views
0

我有一个用于上传CSV文件的表单。它要求定界符CSV文件:在验证中使用Zend_Form输入

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格式文件。 我可以添加类似这样的内容,但是由于$分隔符尚未设置,因此无法使用。

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

任何想法? 谢谢。

回答

2

Zend_Form时调用其元素isValid(),它通过含有所有形式值的第二参数$context

所以,在你的自定义验证,该方法isValid()应该是这样的:

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

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