我有一张上传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)
有什么想法吗? 感谢。
答案 0 :(得分:2)
当Zend_Form
在其元素上调用isValid()
时,它会传递第二个参数$context
,其中包含所有表单值。
因此,在您的自定义验证程序中,isValid()
方法应如下所示:
public function isValid($value, $context)
{
$delimiter = $context['delimiter'];
// continue with your validation using the delimeter
// ...
}