symfony3如何使用查询结果设置输入数据

时间:2017-08-07 16:57:02

标签: php symfony symfony-3.3

我需要的是简单的,我可以使用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并添加下一个getCacheDir()。如果今年没有数字,它将显示1.这是否可行?

提前致谢

1 个答案:

答案 0 :(得分:0)

假设您已有查询结果,可以使用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
        ]);
    }

   //...

}

然后在您的控制器中运行您的查询并将自定义数据传递给表单构建器选项。

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()]);
}