Разрешение пользователям добавлять поля в форму во время выполнения - PullRequest
1 голос
/ 10 октября 2011

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

Данные из формы устанавливаются в объект php, когда формаsubmit:

<?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.

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

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

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

Ответы [ 2 ]

1 голос
/ 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 }
1 голос
/ 10 октября 2011

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...