Symfony窗体-自定义按钮类型无法读取属性

ktca8awb  于 2023-02-13  发布在  其他
关注(0)|答案(1)|浏览(132)

我正在使用Symfony 5.4中的Symfony表单,我需要以下内容:
我有一个带有一些属性的DTO,在我们的应用程序中,默认的ButtonType在theme-twig中有一些特殊的处理(按钮周围有特殊类的特殊容器)。
现在我需要另一个自定义按钮类型给这个新的类型他自己的特殊主题处理。
我已经为此构建了以下代码:
自定义按钮类型类:

class FormAddButtonType extends AbstractType
{
    public const BLOCK_PREFIX = 'formaddbutton';

    public function configureOptions(OptionsResolver $resolver): void
    {
        $resolver->setDefaults([
            'attr' => [
                'class' => 'button blue-button',
            ],
        ]);
    }

    public function getBlockPrefix(): string
    {
        return self::BLOCK_PREFIX;
    }

    public function getParent(): string
    {
        return ButtonType::class;
    }
}

现在,我向窗体添加两个按钮:

public function buildForm(FormBuilderInterface $builder, array $options): void
{
    $builder->add('test_button_1', ButtonType::class, [
        'label' => 'Test Button 1',
        'attr' => [
            'class' => 'button blue-button',
        ],
        'row_attr' => ['class' => 'noborder'],
    ]);

    $builder->add('test_button_2', FormButtonType::class, [
        'label' => 'Test Button 2',
        'attr' => [
            'class' => 'button blue-button',
        ],
        'row_attr' => ['class' => 'noborder'],
    ]);
}

第一个按钮将呈现没有任何问题。但第二个按钮(我的自定义按钮类型)将导致以下错误:
Can't get a way to read the property "test_button_2" in class "My\Name\Space\Dto\MyDataDto".
是的,这个类/对象没有一个名为"test_button_2"的属性。但是"test_button_1"也不存在,这个按钮工作正常。手动设置"'mapped'=〉false"也不起作用。
如果我通过POST_SET_DATA-listener将FormAddButtonType添加到我的自定义集合类型中,没有问题。但是如果我试图在"主窗体"中使用它,它就不起作用了。
你能告诉我哪里做错了吗?

iugsix8n

iugsix8n1#

"mapped" => false

字段选项中,表示“实体中不存在该字段”。
我认为它确实可以与默认的ButtonType一起工作,因为他们可能在

$resolver->setDefaults([ /* ... */ ]);

方法
文件:https://symfony.com/doc/current/reference/forms/types/form.html#mapped

相关问题