ZF2 - Защитить элементы формы

У меня есть форма с различными элементами формы. В режиме создания все элементы должны быть доступны для редактирования, но в режиме редактирования мне нужно заблокировать определенные элементы.

Я попытался установить атрибуты «только для чтения» или «отключено», и это работает в представлении браузера. Но когда пользователь манипулирует POST-запросом, например. Инструменты веб-разработчика (Forms->Enable Form Fields) в FireFox или другом, тогда значения принимаются из формы zend.

Как я могу безопасно защитить/заблокировать элементы формы?


person user1860225    schedule 28.11.2012    source источник
comment
Вам нужно будет проверить данные формы, а не принимать их вслепую.   -  person Artjom B.    schedule 20.08.2015


Ответы (1)


Просто не изменяйте свою сущность/модель опубликованными данными, которые вам не нужны. Для этого такая функция, как $myModel->populate($request->getPost()), может быть не лучшим подходом. Лучше напишите себе такую ​​функцию, как $myModel->populateForEdit($request->getPost()), в которой вы изменяете только те поля, которые разрешено изменять при определенном действии.

Всегда помните: любой пользователь может отправить вам ЛЮБЫЕ данные, которые он хочет. Вам решать фильтровать данные перед заполнением ваших моделей!

person Sam    schedule 28.11.2012
comment
Интеррестинный подход. Я использую Doctrine Hydrator в своей форме: $this->setHydrator(new DoctrineEntity($em))->setObject(new MyEntity()); Любые предложения, как я могу настроить это? - person user1860225; 29.11.2012
comment
Хм, странно было бы иметь две сущности. $e1 //fetched from DB (uneditted) и $e2 //the entity that is posted to you from form - теперь для каждого поля, которое вы хотите изменить $e1->setField($e2->getField()) - но сама доктрина может иметь какое-то решение для таких случаев, я еще не знаком с ней - person Sam; 29.11.2012