Zend_Form отключить заполнение перед isValid () - PullRequest
0 голосов
/ 03 июня 2011

Я не могу отключить заполнение значений в Zend_Form.

У меня есть свой собственный класс формы. Со скрытым элементом токена, где я хотел бы динамически устанавливать случайное значение каждый раз, когда форма вызывается (или помещается повторно). Я думал, что setValue сделает работу.

class MY_Form_Test extends Zend_Form {
    public function init() {
    ...

    $this->addElement('hidden', 'token');
    $this->getElement('token')->setValue(uniqid('',true));
    ... 
}

НО: Когда у меня есть такой простой контроллер. Zend автоматизирует заполнение старых скрытых значений, за исключением генерации новых.

$form = new JC_Form_Test();
if($form->isValid($_POST)){
   // Action ... 
}
else{
   // Error
}

РЕШЕНИЕ: Единственное решение, которое я нашел, - это вызов setValue в методе Controler И ПОСЛЕ isValid. например. в блоке ошибок.

ВОПРОС: Есть ли способ настроить значения элементов непосредственно в классе формы ИЛИ отключить заполнение значений в классе формы или перед вызовом isValid ()?

Ответы [ 2 ]

1 голос
/ 24 августа 2011

Я думаю, что это лучший способ сделать это.

Я много работаю с Zend Framework и имею собственную библиотеку для перезаписи некоторых классов Zend.

Неплохо что-то изменить, но не делайте этого напрямую в Zend Framework

0 голосов
/ 03 июня 2011

ВТОРОЕ РЕШЕНИЕ: Второе решение, которое я нашел, это перегрузить метод isValid () в классе Form.Как это.Тогда мне не нужно помещать setValue () в каждый контроллер.

class MY_Form_Test extends Zend_Form {

    ...

    public function isValid($data){
    // Propagate values
    $valid = parent::isValid($data);

    $this->getElement('token')->setValue(uniqid('',true));

    return $valid;
}

Есть ли другие решения, например.какой вариант элемента сделать эту работу проще?

...