Zend Framework: isValid () очищает значения из отключенных полей формы! - PullRequest
3 голосов
/ 24 марта 2010

При отправке формы отключенные поля формы не отправляются в запросе.

Так что, если у вашей формы есть отключенное поле формы, работа с Zend_Form::isValid() немного расстраивает.

$form->populate($originalData);
$form->my_text_field->disabled = 'disabled';
if (!$form->isValid($_POST)) {
    //form is not valid
    //since my_text_field is disabled, it doesn't get submitted in the request
    //isValid() will clear the disabled field value, so now we have to re-populate the field
    $form->my_text_field->value($originalData['my_text_field']);
    $this->view->form = $form;
    return;
}

// if the form is valid, and we call $form->getValues() to save the data, our disabled field value has been cleared!

Без повторного заполнения формы и создания дублирующихся строк кода, как лучше всего решить эту проблему?

Ответы [ 3 ]

5 голосов
/ 02 июня 2010

Вы устанавливаете элемент как отключенный, чтобы пользователь не мог редактировать его содержимое, а только видеть его? Если это так, просто установите атрибут readonly элемента в true, я думаю, что он будет работать таким образом.

1 голос
/ 02 июня 2010

Я использую пользовательский класс, унаследованный от Zend_Form.Класс добавляет некоторые функции и решает эту проблему, заменяя метод isValid следующим образом:

class Murdej_Form extends Zend_Form {
    function isValid($data) {
        $_data = $this->getValues();
        $valid = parent::isValid($data);
        $this->populate($_data);
        return $valid;
    };
};
0 голосов
/ 28 августа 2012

вместо isValid() мы можем использовать isValidPartial().Однако, в отличие от isValid(), если определенный ключ отсутствует, он не будет выполнять проверки для этого конкретного элемента.Так, isValidPartial() не будет проверяться для отключенных полей.

Ссылка: Документация ZF

...