Zend Framework - Статические элементы формы - PullRequest
2 голосов
/ 31 марта 2009

У меня есть форма, которую пользователь может использовать для создания нового магазина и редактирования существующего. Когда эта форма используется для редактирования магазина, есть определенные поля, которые я хочу, чтобы пользователь видел, но не редактировал, например. store_id. Я исследовал различные Zend_Form_Elements в надежде найти какой-то статический элемент, но безуспешно.

Итак, мой вопрос: как я могу отображать информацию с помощью Zend_Form, которую пользователь не может редактировать?

Спасибо.

Ответы [ 5 ]

3 голосов
/ 31 марта 2009

readonly одного недостаточно, потому что пользователи по-прежнему смогут редактировать его, если они действительно этого хотят. Вы должны использовать $element->setIgnore(true), который будет гарантировать, что Zend_Form_Element не будет пытаться заполнить элемент из POST / GET, и я также проверю это дважды. Вы должны убедиться, что значения, которые вы получаете в базы данных, никогда не могут содержать этот элемент.

Наконец, если вы хотите, чтобы ваш элемент отображался иначе, чем просто с помощью readonly, вы можете сделать это, изменив декораторы элементов.

3 голосов
/ 01 апреля 2009

Мне только что удалось решить это самому. Решение состояло в том, чтобы изменить помощник представления на элементах на помощник formNote, например. $ element-> helper = 'formNote'. Результатом этого стало то, что значение отображается в виде простого текста, а не внутри элемента формы.

Спасибо за ваши ответы.

2 голосов
/ 29 сентября 2009

Это очень хорошее решение, когда вам не нужно заполнять значение элемента при отправке формы. Это эквивалентное решение - использовать метод Form Element setAttrib() и отключить элемент формы

$formElement->setAttrib('disable','disable')  

, который только замораживает элемент.

Но если вам нужно заполнить поле, используя предыдущие решения, вам, вероятно, потребуется добавить дополнительное скрытое поле, которое будет передавать значение. Разработка пользовательского элемента формы будет хорошим стилем, но это не приветствуется каждым разработчиком, поэтому вы можете использовать какой-то хитрый способ установить элемент формы только как текст, но заполнить его значение. Таким образом, когда вы создаете элемент как скрытое поле, задаете его значение и используете метод Form Element setDescription(), чтобы установить и отобразить текстовое значение элемента.

$formElement = new Zend_Form_Element_Hidden( 'elName',
        array( 'label' => 'elLabel', 'value' => 'elValue' ) );

$formElement->setDescription( 'elValue' );

Затем вы можете отобразить этот скрытый элемент и отобразить значение с помощью $formElement->getDescription().

1 голос
/ 31 марта 2009
0 голосов
/ 05 января 2013

Согласно Amr Mostafa, если вы используете:

$element->setAttrib('readonly', 'true');

OR

$element->setAttribs(array('disabled' => 'disabled'));

Пользователь по-прежнему отправляет значения POST / GET, и они сохраняются в БД.

Единственный способ для меня не учитывать значения из POST / GES:

$element->setIgnore(true)

Пример:

$element = new Zend_Form_Element_Text('element');
$element->setIgnore(true);
...