zend framework — скрытый элемент не имеет значения даже при его указании

#zend-framework #element #hidden

#zend-framework #элемент #скрытый

Вопрос:

Я создаю скрытый элемент таким образом:

 $this->addElement('hidden', 'id', '1');
  

но то, что я получаю, это:

 <input type="hidden" name="id" value="" id="id" />
  

Я также пробовал подобное:

 $this->addElement('hidden', 'id', array(
    'value' => 1
));
  

но лучше от этого не стало.

Что не так?

Комментарии:

1. Ваш второй пример должен сработать, поскольку я не вижу в нем ничего плохого.

2. Итак, причина не в этом коде. Вы, должно быть, где-то в своем коде делаете что-то, что вызывает проблемы. Без дополнительной информации трудно сказать, что не так.

3. Спасибо за все ответы, ребята. Я обнаружил, что проблема действительно была связана с проблемой isValid.

Ответ №1:

Возможно, вы используете

 $form->populate($someData);
  

или

 $form->isValid($someData);
  

где-то в вашем коде 😉

Комментарии:

1. Спасибо. Я начал искать другие методы, и действительно возникла проблема такого рода.

2. Да. isValid имеет тенденцию очищать форму, а пользовательский метод заполнения может довольно сильно испортить настройки по умолчанию

Ответ №2:

Я думаю, вам нужно поместить в свой класс form:

 public function populate(array $values) {
    parent::populate($values);
    $this->addElement('hidden', 'hidden');
    $el = $this->getElement('hidden');
    $el->setValue(1);

}
  

Ответ №3:

Вы можете использовать метод setValue Zend_Form.

Попробуйте это так:

 $this->getElement('your-name')->setValue(1);
  

Комментарии:

1. @softwareplay setVlue() завершает работу, пожалуйста, обратитесь к документации: framework.zend.com/manual/1.12/en/zend.form.forms.html

Ответ №4:

Возможно, перед рендерингом вы выполняете $form->setValue() и идентификатор параметра равен нулю.

Комментарии:

1. Нет. У меня нет $form-> setValue(). Я проверил, метод даже не существует.

2. @ndefontenay тогда ваш второй пример верен. Без кода сложно что-то сказать.

Ответ №5:

У меня это работает (zf 1.1) с int или строкой, но вы пробовали передавать значение в виде строки?:

$this->addElement( 'hidden', 'id', array('value'=>'1') )

Ответ №6:

Ответ прост:

 //$form <- is your zend form element;
$form->get('element_name')->setValue(1);
  

У меня сработало! 🙂

Как говорили те, кто был до меня: убедитесь, что на вашем пути нет установщиков элементов формы (populate, setValues и т.д.). 🙂

Ответ №7:

После проблемы с этим я использовал (в классе form)

 $hidden = $this->createElement('hidden','hiddenElement');
$hidden->setAttrib('xxx','my value');
$this->addElement($hidden);
  

Извлеките значение с помощью

 $form->hiddenElement->getAttrib('xxx');
  

Возможно, это не оптимальное решение, но для меня оно сработало.

Ответ №8:

Вы пробовали setDefault?

 $this->addElement( 'hidden', 'id', array(
    'default' => 1
) );