【问题标题】:Parameter from controller to form has always null value从控制器到表单的参数始终为空值
【发布时间】:2023-03-05 18:41:01
【问题描述】:

我想将一个参数从控制器传递给表单,但该参数始终为空值。

这是控制器

$form = $this->createForm(BaseType::class, $entity, array('nom' => 'Informatique'));

这是FormType

 ->add('departement', EntityType::class, array(
            'class'=> 'AppBundle\Entity\Departement',
            'choice_label' => 'nom',
            'multiple' => false,
            'expanded' => false,
            'query_builder' => function(DepartementRepository $er ) use($options)  {
                return $er->createQueryBuilder('d')
                    ->where('d.nom like :nom')
                    ->setParameter('nom', '%' .$options['nom']. '%')
                    ;
            }
        ))

 public function configureOptions(OptionsResolver $resolver)
{
    $resolver->setDefaults(array(
        'data_class' => 'AppBundle\Entity\Formation',
        'nom' => null,
    ));
}

var_dump($options['nom']) 的输出;为空

【问题讨论】:

  • 您需要展示“DocumentType”类的代码以及您打算如何创建 $document 对象?
  • @Alvin Bunk:我已经编辑了我的问题

标签: php symfony


【解决方案1】:

createForm 的第三个参数是数组$options,可以包含任何你想要的东西。

所以在你的控制器中:

public function yourAction()
{
    $form = $this->createForm(
        DocumentType::class,
        $document,
        ['yourCustomOption' => 'value']
    );

您可以在FormType 中访问或设置默认值:

public function buildForm(FormBuilderInterface $builder, array $options)
{
   $yourCustomOption = $options['yourCustomOption']; //will be 'value'
}

public function configureOptions(OptionsResolver $resolver)
{
    $resolver->setDefaults(array(
        'yourCustomOption' => 'Default value',
    ));
}

【讨论】:

  • 我已经尝试过您的解决方案,但参数始终为空值。我已经编辑了我的问题
  • 我从来没有遇到过这种方法不起作用的情况。你确定你没有覆盖其他地方的价值吗?如果可能,粘贴完整的 FormType。
  • 对我来说看起来不错。我以这种方式在我的表单中使用选项,我从来没有遇到过问题。您确定您正在检查您使用该选项创建的表单,而不是另一个?
  • 您所说的“有选项而不是另一个”是什么意思?
【解决方案2】:

在您的代码中,您已将 'nom' 设置为 null,因此您可能(我猜)需要更改它:

public function configureOptions(OptionsResolver $resolver)
{
  $resolver->setDefaults(array(
        'data_class' => 'AppBundle\Entity\Formation',
        'nom' => 'some nom value',
  ));
}

我不知道你为什么将它设置为 null 然后你期望它不为 null ???你忽略了这一点吗?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-18
    • 1970-01-01
    • 1970-01-01
    • 2016-05-12
    • 1970-01-01
    相关资源
    最近更新 更多