En supposant que vous avez déjà le résultat de votre requête, vous pouvez utiliser l'argument FormType::buildForm
$options
pour passer vos données personnalisées à la forme.
Vous devrez définir les options personnalisées dans la méthode configurOptions
pour qu'elles soient acceptées. En utilisant setDefaults
, les valeurs définies seront définies si l'option n'est pas fournie dans le tableau d'options.
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
]);
}
//...
}
Ensuite, dans votre contrôleur d'exécuter votre requête et transmettre les données personnalisées aux options de générateur de formulaire.
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()]);
}
pensant que vous vouloir un [DataTransformer] (https://symfony.com/doc/current/form/data_transformers.html) Sinon, s'il vous plaît montrer la logique pour le résultat souhaité. Il est difficile de comprendre les termes «rechercher» et «ajouter le suivant». Je suppose que vous voulez dire "2017" le nombre recherché serait "7" et ajouter le prochain ("2018") serait "8" donc "8 + 7". – fyrye
Bonjour, merci d'avoir pris le temps de commenter. Comme vous pouvez le voir «année» est toujours l'année réelle. donc si dans le tableau vous avez 2017-1,2017-2,2017-3 ({année} - {numéro}), je dois montrer 2017-4 à l'intérieur de ces entrées. Cela a du sens pour vous? –