で
おかげで、フォームにカスタムデータを渡すためにFormType::buildForm
$options
引数を使用することができます。
configurOptions
メソッドでカスタムオプションを定義して、それらを受け入れる必要があります。 setDefaults
を使用すると、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
]);
}
//...
}
その後、あなたのコントローラにクエリを実行し、フォームビルダオプションにカスタムデータを渡します。あなたは[DataTransformer](https://symfony.com/doc/current/form/data_transformers.html)を希望している考える
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()]);
}
そうでなければ望ましい結果のためのロジックを示してください。 'search'と' add the next one'という用語を理解するのは難しいです。私はあなたが '2017'を意味すると思っています。検索された数字は '7 'で、次のもの(' 2018')は '8'なので' 8 + 7'です。 – fyrye
こんにちは、お時間をいただき、ありがとうございます。あなたが見ることができるように 'year'は常に実際の年です。 2017-1,2017-2,2017-3({year} - {number})のテーブルにあれば、その入力の中に2017-4を表示する必要があります。それはあなたにとって理にかなっていますか? –