Мой проект написан с использованием компонентов Silex и Symfony (т.е. компонента формы).
Я пытаюсь создать батарею из радио кнопок, созданных из класса, и хочу предварительно выбрать один из этих радио.
Я создаю такую форму:
$form = $app['form.factory']->createBuilder(new QueryFormType(), $query)
где QueryFormType
мой пользовательский тип (он расширяет AbstractType), где я определяю поля формы и $query
является сущностью со значениями по умолчанию для формы.
Поля формы внутри QueryFormType
выглядеть так (для ясности я пропустил строитель и другие поля):
->add('contractPeriod', 'filter', array(
'label' => 'Contract Period:',
'choices' => array(
'-1' => 'No period',
'1' => '1 month',
'2' => '2 months',
'3' => '3 months',
'6' => '6 months',
'12' => '12 months',
'18' => '18 months'
),
'expanded' => TRUE,
'multiple' => FALSE
))
$query
является экземпляром класса, который должен предварительно выбрать переключатель. В его конструкторе вы найдете:
$this->contractPeriod = '3';
Для этого свойства также есть правильные методы получения и установки.
Сейчас. Форма и переключатели отображаются правильно. Радиокнопка предварительно выбрана для '3' => '3 months'
, Когда я проверяю радио выше в списке определения (то есть 2, 1 или -1) форма принимает его как значение. Но когда я проверяю значение ниже в определенном списке (6, 12 или 18), он использует значение по умолчанию, установленное в $query
, Какого черта?
Мой вопрос заключается в том, как правильно установить значение по умолчанию, чтобы я мог выбрать любое другое значение, которое я хочу после визуализации формы?
Я уже пытался использовать свойство data в определении поля формы, и это та же история. Я могу выбрать только более низкие значения, но не более. Я устал использовать ‘предпочитаемую_оплату’, но она не работает так, как я ожидал (испортил идентификаторы входов).
Я прошу вас о помощи.
РЕДАКТИРОВАТЬ
Вот как я отправляю форму:
$form->submit($request->query->get($form->getName()), FALSE);
Я обнаружил, что если я установил clearMissing в TRUE (второй аргумент), он работает хорошо, но я не могу выполнить частичное предварительное заполнение (или исправить форму). Кажется, это ошибка.
РЕДАКТИРОВАТЬ
Это как-то связано с этими строками внутри класса Form компонентов symfony:
if ($isSubmitted || $clearMissing) {
$child->submit($isSubmitted ? $submittedData[$name] : null, $clearMissing);
unset($submittedData[$name]);
if (null !== $this->clickedButton) {
continue;
}
if ($child instanceof ClickableInterface && $child->isClicked()) {
$this->clickedButton = $child;
continue;
}
if (method_exists($child, 'getClickedButton') && null !== $child->getClickedButton()) {
$this->clickedButton = $child->getClickedButton();
}
}
$ child-> submit обновляет viewData своего родителя (в данном случае Form) до подчиненного значения, только если оно меньше или равно значению по умолчанию, установленному в форме. Зачем?
РЕДАКТИРОВАТЬ
Я думаю, что компонент Form не будет передавать потомков после значения по умолчанию, которое в этом случае isSubmited == false и clearMissing == false. Это делает доступными только значения до значения по умолчанию. Но я не знаю
Задача ещё не решена.
Других решений пока нет …