【问题标题】:Using Zend_Form input in validation在验证中使用 Zend_Form 输入
【发布时间】:2011-01-05 15:23:07
【问题描述】:

我有一个用于上传 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)

有什么想法吗? 谢谢。

【问题讨论】:

    标签: zend-framework csv zend-form


    【解决方案1】:

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

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

    public function isValid($value, $context)
    {
         $delimiter = $context['delimiter'];
    
         // continue with your validation using the delimeter
         // ...
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-07-05
      • 2011-05-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-07-02
      • 1970-01-01
      相关资源
      最近更新 更多