Разница между hide () и ['#access] = FALSE

Я хочу удалить кнопку удаления из стандартной формы редактирования в определенных случаях, и я ищу правильный способ сделать это.

До сих пор я обнаружил, что hide() отмечает элемент как уже обработанный, поэтому он в основном обманывает процесс рендеринга.

['#access'] = FALSE делает что-то подобное, я думаю, но все же немного другое.

В обоих случаях ничего не отображается относительно кнопки удаления, но не позволяет ли любой из них запретить выполнение кода удаления при отправке (например, если пользователь манипулировал запросом POST)?

Или мне нужен метод form_validate() для этого?

6 голосов | спросил Koen 10 WedEurope/Moscow2014-12-10T17:26:09+03:00Europe/Moscow12bEurope/MoscowWed, 10 Dec 2014 17:26:09 +0300 2014, 17:26:09

2 ответа


8

Скрытие элемента выполняется во время процесса рендеринга. Если вы посмотрите на код, он просто отмечает элемент как уже отображаемый.

Ключ #access используется во время процесса сборки формы (не удается найти мою диаграмму, поэтому я не могу скажите вам, какую именно часть). В нем говорится, что этот элемент является частью формы, но конкретный пользователь может иметь или не иметь доступ, чтобы иметь возможность использовать его.

Отсоединение элемента просто удаляет элемент и говорит, что он больше не является частью формы.

Из трех вариантов предпочтительнее использовать #access: это API, поэтому вы должны его использовать. Когда вы просто скрываете элемент, пользователь все равно может передать этот элемент git GET /POST, поскольку API-интерфейс формы API считает его действительным. Я думаю, что для элементов, не представляющих элементы, код #default_value также появится в $form_state['values'], когда вы проверяете /отправляете (однако я не помню последний раз, когда я тестировал это).

ответил mpdonadio 10 WedEurope/Moscow2014-12-10T18:13:13+03:00Europe/Moscow12bEurope/MoscowWed, 10 Dec 2014 18:13:13 +0300 2014, 18:13:13
1

Использование hide () просто предотвратит отображение этого элемента формы. То же самое относится к unset ().

Мое понимание заключается в том, что установка #access для false означает, что даже если запрос POST обрабатывается, вход с этого элемента не будет принят.

ответил autopoietic 10 WedEurope/Moscow2014-12-10T18:09:57+03:00Europe/Moscow12bEurope/MoscowWed, 10 Dec 2014 18:09:57 +0300 2014, 18:09:57

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132