Zend_form устанавливает поля обязательные, только если установлен флажок - PullRequest
1 голос
/ 09 сентября 2010

Я использую Zend_Form со страницей регистрации. У меня есть флажок, который, если установлен, покажет дополнительные поля для выставления счетов. В моем экземпляре формы я хочу, чтобы эти дополнительные поля были setRequired (true), только если этот флажок установлен. Есть ли способ сделать это? Теперь проблема в том, что мне нужно установить все поля выставления счетов как setRequired (false), но если пользователь установит флажок, логике будет все равно, если поля пусты, поскольку они не обязательны.

alt text

Ответы [ 3 ]

1 голос
/ 04 февраля 2011

У меня была такая же проблема, и я закончил писать свой собственный валидатор:

<?
class Mh_Validator_RequiredIfCheckbox extends Zend_Validate_Abstract
{
    const SHOULD_BE_NOT_EMPTY = 'shouldBeNotEmpty';

    private $_field;
//protected $_field;
public function __construct($field)
{
    $this->_field = $field;
}    

    protected $_messageTemplates = array(
    self::SHOULD_BE_NOT_EMPTY =>"This field is required"
    );

    /**
     * Defined by Zend_Validate_Interface
     *
     * @param  string $value
     * @return boolean
     */

    public function isValid($value, $context = null)
    {

        if($context[$this->_field]==0 && $value == null)
        {
            $this->_error(self::SHOULD_BE_NOT_EMPTY);
            return false;
        }
    return true;

    }
}
0 голосов
/ 05 июня 2012

Почему бы просто не проверить, был ли выдан POST (если это метод вашей формы), и, если это так, посмотреть на значение флажка и установить значение false для всех элементов (возможно, удобно хранить их в массиве) перед проверкой с помощью$ form-> isValid ($ formData)?

Пример:

if ($this->getRequest()->isPost()) {
    $formData = $this->getRequest()->getPost();
    if ($formData['billing_information_different'] == '1') {
        $billingElement1->setRequired(true);
        $billingElement2->setRequired(true);
    }
}
0 голосов
/ 09 сентября 2010

ОК, вот что я в итоге сделал.Я создал платежную информацию как Zend_Form_SubForm и добавил ее в основную форму регистрации.Затем в своем контроллере я проверяю, установлен ли флажок.Если это не так, то я удаляю подчиненную форму из основной формы и проверяю форму.Если есть ошибка, я повторно добавляю подчиненную форму, чтобы поля отображались при повторной прорисовке формы.Надеюсь, это кому-нибудь поможет.

...