Что мне нужно, это просто, я могу сделать это с помощью PHP, но я хочу пользователя FormBuilder.
У меня есть это:
$builder
->add('number',NumberType::class, array(
'label' => 'Number',
'attr' => array(
'readonly' => "readonly")
)
)
->add('year',NumberType::class, array(
'label' => 'Year',
'data' => date('Y'),
'attr' => array(
'readonly' => "readonly")
)
)
И что мне нужно, это искать последние number
этого year
и добавьте следующий. Если в этом году нет номера, он покажет 1. Возможно ли это?
заранее спасибо
Предполагая, что у вас уже есть результат запроса, вы можете использовать FormType::buildForm
$options
аргумент для передачи ваших пользовательских данных в форму.
Вам нужно будет определить пользовательские параметры в configurOptions
метод для них должен быть принят. Используя setDefaults
определенные значения будут установлены, если опция не указана в массиве опций.
class FormType extends \Symfony\Component\Form\AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
//...
->add('number',NumberType::class, array(
'label' => 'Number',
'data' => $options['number'],
'attr' => array(
'readonly' => "readonly")
)
)
->add('year',NumberType::class, array(
'label' => 'Year',
'data' => $options['year'],
'attr' => array(
'readonly' => "readonly")
)
);
}
public function configureOptions(OptionsResolver $resolver)
{
$resolver->setDefaults([
'year' => date('Y'),
'number' => 1
]);
}
//...
}
Затем в вашем контроллере запустите ваш запрос и передайте пользовательские данные в опции построителя форм.
public function formAction(Request $request)
{
$options = ['year' => date('Y')];
/**
* query data
* @returns integer|null default: 1
*/
$options['number'] = $em->getRepository('app:Entity')->filterYearNumber($options['year']) ?: 1;
$form = $this->createForm(FormType::class, $data, $options);
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
//... handle submission
}
return $this->render('form.html.twig', ['form' => $form->createView()]);
}
Других решений пока нет …