Попытка скопировать значения в несколько встроенных форм - PullRequest
0 голосов
/ 12 марта 2012

У меня есть приложение Symfony 1.4, позволяющее пользователям вводить данные в базу данных тестирования электрических приборов. Страница с вопросами состоит из нескольких встроенных «новых» форм, поэтому пользователь может отправить множество тестов за один раз. Форма проверяется и сохраняется правильно, но обратная связь заключается в том, что ее будет утомительно использовать.

Поскольку большая часть данных может быть одинаковой в каждом тесте (например, одна и та же дата, один и тот же результат, один и тот же человек, выполняющий тестирование), я бы хотел, чтобы пользователь мог заполнить значения в верхней строке, а затем щелкнуть кнопку, чтобы заполнить ту же информацию в строках ниже. Я почти уверен, что для этого потребуется javascript, но у меня мало опыта.

Буду признателен за любые предложения.

Большое спасибо.

1 Ответ

0 голосов
/ 13 марта 2012

Ну, мне удалось разобраться без использования JavaScript.

Я помещаю кнопку на странице

<input type="submit" name="copy_values" value="duplicate">

В действие для страницы я включил код ...

 elseif (isset($_POST['copy_values'])) {
   // get values from first embedded test
   $newTests = $testList['new_tests'];
   $testDate = $newTests[0]['et_date_tested'];
   $testedBy = $newTests[0]['et_tester_id'];
   $formOptions = array('test_date'=>$testDate, 'tester'=>$testedBy);
   $this->form = new MultiTestForm(null, $formOptions);
 }
 $this->setTemplate('multiAdd');

... который принимаетЗначения из виджетов в верхней строке формы и создает массив.Это передается как массив параметров для создания новой формы.

В классе формы верхнего уровня ..

public function configure()
{
  ...
  $subform = new sfForm();
  for($i = 0;$i < sfConfig::get('app_new_test_rows'); $i ++) 
  {
    $formToAdd = new TestsForMultiAddForm(null,$this->getOptions());
    $subform->embedForm($i, $formToAdd);
  }

  $this->embedForm('new_tests', $subform);
}

... и во встроенном классе формы ...

 public function configure() 
{
   ...
   if ($this->getOption('test_date'))  {
     $this->setDefault('et_date_tested', $this->getOption('test_date'));
   }
   if ($this->getOption('tester')) {
     $this->setDefault('et_tester_id', $this->getOption('tester'));
   }
    ...
 }

Не уверен, что это обычный способ решения проблемы, но он работает!

...