Разрешение пользователям добавлять поля в форму во время выполнения

Я изменяю компонент формы, который является частью веб-приложения, чтобы пользователи могли добавлять и удалять дополнительные поля формы во время выполнения.

Данные из формы устанавливаются в php-объект при отправке формы:

<?php
   class users {
     public function setName($name){
         (...)
     }

     public function getName(){
         (...)
     }

     public function setSomeAttribute($name){
         (...)
     }

     public function getSomeAttribute(){
         (...)
     }
   }

Форма формируется так:

$form = new Form();
$form->addField('Text', 'Name', (... some other parameters...))
->addField('Address', 'SomeAttribute', (... some other parameters...));

Генерируется представление, содержащее дерево объектов, представляющих каждое поле (некоторые «поля», такие как адреса, могут содержать дочерние поля, такие как ввод текста.

Учитывая, что мы знаем имя свойства объекта, компонент формы может затем легко связать результат этого поля формы с соответствующим свойством объекта, используя геттеры и сеттеры.

Проблема, с которой я сталкиваюсь сейчас, заключается в следующем: мне нужно разрешить пользователю добавлять поля во время выполнения. Это будет работать с использованием Jquery, а также резервным вариантом для пользователей без javascript.

Предположим, у нас есть страница, на которой пользователь может редактировать свой профиль и добавлять несколько адресов доставки. У него будет кнопка с надписью «добавить адрес». Нажатие этой кнопки сделает следующее:

  • Для пользователей с включенным javascript пользователь сразу увидит новое «поле адреса», которое состоит из нескольких раскрывающихся списков и добавленных текстовых полей.
  • Для пользователей без включенного javascript страница обновится и будет добавлено новое «поле адреса», состоящее из нескольких раскрывающихся списков и текстовых полей.

Каков наилучший способ сообщить стороне PHP, что эти новые поля существуют, и нам нужно получить от них опубликованные данные?


person F21    schedule 10.10.2011    source источник


Ответы (2)


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

для страны для 2 адресов вы хотите назвать такие элементы, как «addr_1_country», «addr_2_country» или альтернативно «addr_country[]» для обоих, чтобы сделать значения доступными в массиве. если вы используете первый, вы можете перебирать имена «addr_$i_country», пока не обнаружите, что они не установлены (или заставить JQuery обновить значение счетчика, которое также отправляется, например «addr_count», который сообщает вам, как долго цикл).

в любом случае вам просто нужно знать имена. но если вы можете указать только «Адреса» и/или дочерним полям даны имена, которые вы не можете назначить сами, у вас могут возникнуть проблемы. возможно, ваш «-> addField ()» достаточно умен, чтобы назвать их для вас. в противном случае обновите «Форму» для автоматического имени или примите аргументы «имя».

person poop-deck    schedule 10.10.2011

В любом случае ваша форма при отправке заполнит массив в $_REQUEST (то есть $_GET и $_POST) всеми полями формы и их необходимыми значениями. У вас может быть функция установки, которая берет этот массив, находит, что нового, и динамически устанавливает их.

Я предполагаю, что у вас есть SET количество новых полей, вы можете просто PRE сделать для них геттеры и сеттеры, а также выполнить цикл $_REQUEST при отправке на стороне php и вызвать сеттеры для соответствующего поля.

foreach ($_REQUEST[] as $field){ // IF STATEMENT TO DETERMINE WHAT FIELD THIS IS BASED ON FIELD NAME }
person Wesley D. Radcliffe    schedule 10.10.2011