Saat Anda menetapkan bidang sebagai readonly
, browser mengunci bidang dan mengirim data kembali ke server setelah pengiriman. Atribut lainnya adalah disabled
yang mengunci bidang dan tidak mengirim data kembali ke server.
Untuk kedua kasus, Anda dapat secara paksa mengatur nilainya menjadi sama setelah pengiriman. Jadi, bahkan ketika bidang diatur ke readonly
atau disabled
, dan pengguna memodifikasi HTML dan mengirim data yang berbeda, $form_state['values']
akan tetap tidak berubah.
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;
}
Perhatikan bahwa kita atur #value
dari #default_value. #default_value adalah cara biasa untuk menetapkan nilai default yang dimuat saat formulir dibuat, dan $form_state['values']
akan berisi nilai default_value atau input pengguna. Ketika Anda mengatur #value
secara eksplisit, input pengguna diabaikan dan #value
akan digunakan.
Bagaimanapun, saya akan merekomendasikan untuk digunakan '#access' => FALSE,
ketika menyembunyikan elemen formulir. Ini akan menghapus elemen sepenuhnya, sementara memungkinkan Anda untuk menggunakan nilainya.
field_permissions
akan lebih mudah daripada melakukan pekerjaan dengan cara yang kotor.