Коли ви встановите поле як readonly, браузер блокує поле і після подання надсилає дані на сервер. Інший атрибут полягає в disabledтому, що він блокує поле і не надсилає дані назад на сервер.
В обох випадках ви можете примусово встановити значення таким самим після подання. Отже, навіть коли поле встановлено на readonlyабо disabled, і користувач змінив HTML і надіслав різні дані, $form_state['values']залишиться незмінним.
function _build_element_readonly($element, &$form_state) {
$element['value']['#attributes']['readonly'] = 'readonly';
$element['value']['#value'] = isset($element['value']['#default_value'])
? $element['value']['#default_value']
: '';
return $element;
}
Зауважте, що ми встановлюємо #value з #default_value. #default_value - це звичайний спосіб встановити значення за замовчуванням, яке завантажується під час створення форми, і $form_state['values']буде містити default_value або введення користувача. Якщо ви встановите #valueявно, введення користувача ігнорується і #valueбуде використовуватися.
У будь-якому разі, я б рекомендував використовувати '#access' => FALSE,приховування елементів форми. Це повністю видалить елемент, дозволяючи вам використовувати його значення.
field_permissionsбуло б простіше, ніж виконувати роботу брудно.