如何解决Symfony错误变量“expanded”不存在?

cfh9epnr  于 2023-04-21  发布在  其他
关注(0)|答案(2)|浏览(124)

目前,我用PHP Symfony框架开发了一个应用程序。我有一个表单生成器的问题(我想)。
我有两个实体。问题和选择。问题和选择是一对多关系实体。一个问题有多个选择。
另外两个实体,视频和类别,其关系与问题和选择的关系相同。
我用php bin/console make:crud为这些实体创建脚手架crud。
然后我添加关系symfony,如guide from Symfony
逻辑是,我必须首先选择类别来创建新的视频。与选择相同,我必须首先选择问题来创建新的选择数据。
当我打开Choice Create Form [/choice/new]时,问题出现了。
变量“expanded”不存在。
然后错误详细信息显示在这行

return $this->render('choice/new.html.twig', [
    'choice' => $choice,
    'form' => $form->createView(), // The highlighted error appear on this line
]);

但是,它只是发生在问题-选择,我的类别-视频的关系是刚刚好.我试图使问题-选择作为类别-视频相同(我改变了实体的名称肯定),我三重检查,但选择创建窗体上的错误仍然发生.
这是我的App\Form\ChoiceType

public function buildForm(FormBuilderInterface $builder, array $options)
{
    $builder
        ->add('content')
        ->add('letter')
        ->add('image')
        ->add('question', EntityType::class, [
            'class' => Question::class,
            'choice_label' => 'content'
        ])
    ;
}

注意add('question')
这是我的App\Form\VideoType buildForm方法

<?php
public function buildForm(FormBuilderInterface $builder, array $options)
{

    $builder
        ->add('title')
        ->add('url', FileType::class, [
            'label' => 'Video File',
            'required' => false,
        ])
        ->add('thumbnail', FileType::class, [
            'required' => false,
        ])
        ->add('description')
        ->add('category', EntityType::class, [
            'class' => Category::class,
            'choice_label' => 'name'
        ])
    ;
}

注意add('category')
有人知道发生了什么吗?

iszxjhcz

iszxjhcz1#

我将App\Form\ChoiceType重命名为App\Form\TheChoiceType,对控制器上的类名进行了一些调整。一切正常!
我不相信这个!解决方案是重命名表单类型。

yvfmudvl

yvfmudvl2#

重命名肯定会起作用,因为错误与名称有关。
在表单类App\Form\ChoiceType中添加方法getBlockPrefix如下:

class ChoiceType extends AbstractType
{
    public function buildForm(FormBuilderInterface $builder, array $options): void
    {
        // ………
    }
    
    public function getBlockPrefix()
    {
        return 'question_choice';
    }
    
    // ………
}

这样,您的表单就不会在使用默认块前缀呈现的表单布局中遇到{%- block choice_widget -%}。默认块前缀是基于表单类名创建的。您可以在这里阅读更多关于表单片段命名的信息:
https://symfony.com/doc/current/form/form_themes.html#form-fragment-naming
其他表单名称也是如此,比如text、textarea、file,甚至color(Chloé也遇到过同样的问题)。
有时候命名很难:)

相关问题