Khi bạn đặt trường dưới dạng readonly
, trình duyệt sẽ khóa trường và gửi dữ liệu trở lại máy chủ khi gửi. Thuộc tính khác là disabled
khóa trường và không gửi dữ liệu trở lại máy chủ.
Đối với cả hai trường hợp, bạn có thể mạnh mẽ đặt giá trị là như nhau sau khi gửi. Vì vậy, ngay cả khi trường được đặt thành readonly
hoặc disabled
, và người dùng đã sửa đổi HTML và gửi dữ liệu khác nhau, $form_state['values']
sẽ vẫn không thay đổi.
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;
}
Lưu ý rằng chúng tôi đặt #value
từ #default_value. #default_value là cách thông thường để đặt giá trị mặc định tải lên khi biểu mẫu được tạo và $form_state['values']
sẽ chứa default_value hoặc đầu vào của người dùng. Khi bạn đặt #value
rõ ràng, đầu vào của người dùng sẽ bị bỏ qua và #value
sẽ được sử dụng.
Dù sao, tôi khuyên bạn nên sử dụng '#access' => FALSE,
khi ẩn các phần tử biểu mẫu. Nó sẽ loại bỏ hoàn toàn phần tử, đồng thời cho phép bạn sử dụng các giá trị của nó.
field_permissions
sẽ dễ dàng hơn thực hiện công việc theo cách bẩn thỉu.