Использование входных данных Zend_Form в валидации - PullRequest
0 голосов
/ 05 января 2011

У меня есть форма для загрузки файла 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 Validate, который расширяет Zend_Validate_Abstract. Это работает, но я хочу иметь возможность проверить мой введенный CSV-файл формы с ним. Я могу добавить что-то вроде этого, но так как $ delimiter еще не установлен, он не будет работать.

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

Есть идеи? Спасибо.

1 Ответ

2 голосов
/ 05 января 2011

Когда Zend_Form вызывает isValid() для своих элементов, он передает второй параметр $context, содержащий все значения формы.

Итак, в вашем пользовательском валидаторе isValid() метод должен выглядеть так:

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

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