Пользовательское сообщение об ошибке Zend для флажков - PullRequest
4 голосов
/ 06 мая 2009

У меня есть форма на Zend-сайте, на которой есть обязательный флажок «Условия».

Я установил специальное сообщение, которое гласит: «Вы должны согласиться с условиями».

однако, поскольку флажок "присутствие = 'обязателен" ", он возвращает

Field 'terms' is required by rule 'terms', but the field is missing

которая является этой константой, определенной в рамках Zend:

self::MISSING_MESSAGE     => "Field '%field%' is required by rule '%rule%', but the field is missing",

Я мог бы отредактировать эту константу, но это изменило бы сообщение об ошибке для всех необходимых флажков.

Как я могу повлиять на сообщение об ошибке для этого конкретного случая?

Ответы [ 3 ]

14 голосов
/ 06 мая 2009

Если вы используете Zend_Form_Element_Checkbox, вы можете настроить сообщения об ошибках на Zend_Validate валидаторах .

$form->addElement('checkbox', 'terms', array(
  'label'=>'Terms and Services',
  'uncheckedValue'=> '',
  'checkedValue' => 'I Agree',
  'validators' => array(
    // array($validator, $breakOnChainFailure, $options)
    array('notEmpty', true, array(
      'messages' => array(
        'isEmpty'=>'You must agree to the terms'
      )
    ))
   ),
   'required'=>true,
);

Вы хотите убедиться, что непроверенное значение «пусто» и что поле «обязательно»

3 голосов
/ 06 мая 2009

Вы можете переопределить сообщение по умолчанию следующим образом:

$options = array(
                'missingMessage' => "Field '%field%' is required by rule '%rule%', dawg!"
            );

А потом:

$input = new Zend_Filter_Input($filters, $validators, $myData);

Или

$input = new Zend_Filter_Input($filters, $validators, $myData);
$input->setOptions($options);

... и наконец:

if ($input->hasInvalid() || $input->hasMissing()) {
  $messages = $input->getMessages();
}

Упоминается на Zend_Filter_Input руководстве на странице.

1 голос
/ 23 мая 2018

После ответа @gnarf для тех из вас, кто может установить поля формы немного по-другому (как я), вы также можете сделать следующее:

$agree_tc_and_privacy = new Zend_Form_Element_Checkbox('agree_tc_and_privacy');
$agree_tc_and_privacy
->setLabel("My T&Cs Agreement text ...")
->addValidator('NotEmpty', false, array('messages' => 'You must and agree...'))
->setRequired(true)
->setOptions(
    array(
        'uncheckedValue'=> '', //important as explained by gnarf above
        'checkedValue' => '1',
    )
);
$this->addElement($agree_tc_and_privacy);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...