Php 如何向Symfony表单字段添加选项?

Php 如何向Symfony表单字段添加选项?,php,forms,symfony,types,Php,Forms,Symfony,Types,我对PHP和Symfony相当陌生,正在为表单选项而挣扎: 我有以下简单的代码: //OnceType.php class OnceType extends AbstractType { public function buildForm(FormBuilderInterface $builder, array $options) { $builder ->add('date', TextType::class, [ "for

我对PHP和Symfony相当陌生,正在为表单选项而挣扎:

我有以下简单的代码:

  //OnceType.php
class OnceType extends AbstractType
{

public function buildForm(FormBuilderInterface $builder, array $options)
{
    $builder
        ->add('date', TextType::class, [
            "format" => "date"
        ])
    ;
}

public function configureOptions(OptionsResolver $resolver)
{
    $resolver->setDefaults([
        'data_class' => Once::class,
        'format' => "date",
    ]);
 }
}
我得到一个错误,因为
格式
不是
文本类型
的一个选项,但我找不到一种方法来添加我自己的选项(但我从我阅读的其他帖子中知道这是可能的)


我已经阅读了很多其他类似问题的帖子,但无法理解如何做到这一点(我尝试了
setDefaults选项
,但它没有把我带到任何地方)

您需要在configureOptions()方法中添加对$resolver->setAllowedTypes()的调用


请参见

您需要在configureOptions()方法中添加对$resolver->setAllowedTypes()的调用

请参见

谢谢您的帮助

我试图这样做,但仍然得到相同的错误:

class OnceType extends AbstractType
{
    public function buildForm(FormBuilderInterface $builder, array $options)
   {
        $builder
            ->add('date', TextType::class, ["format" => "date"])
        ;
    }

public function configureOptions(OptionsResolver $resolver)
    {
        $resolver->setDefaults([
            'data_class' => Once::class,
            "format" => "date",
        ]);

        $resolver->setAllowedTypes("format", "string");
    }
}
编辑:我认为这是因为解析器在表单中添加了选项,而不是选项iteself('date',在buildForm中添加的选项)

谢谢您的帮助

我试图这样做,但仍然得到相同的错误:

class OnceType extends AbstractType
{
    public function buildForm(FormBuilderInterface $builder, array $options)
   {
        $builder
            ->add('date', TextType::class, ["format" => "date"])
        ;
    }

public function configureOptions(OptionsResolver $resolver)
    {
        $resolver->setDefaults([
            'data_class' => Once::class,
            "format" => "date",
        ]);

        $resolver->setAllowedTypes("format", "string");
    }
}

编辑:我认为这是因为那里的解析器将选项添加到表单中,而不是选项iteself('date',buildForm中添加的选项)

您需要的是创建一个新的自定义扩展名,该扩展名扩展文本类型,例如:

<?php

namespace App\Form;

use Symfony\Component\Form\AbstractTypeExtension;
use Symfony\Component\Form\Extension\Core\Type\FormType;
use Symfony\Component\Form\FormInterface;
use Symfony\Component\Form\FormView;
use Symfony\Component\OptionsResolver\OptionsResolver;

class TextTypeExtension extends AbstractTypeExtension
{
    public function buildView(FormView $view, FormInterface $form, array $options)
    {
        $view->vars['format'] = $options['format'];
    }

    public function configureOptions(OptionsResolver $resolver)
    {
        $resolver->setDefaults([
            'format' => null,
        ]);
    }

    public static function getExtendedTypes(): iterable
    {
        return [TextType::class];
    }
}

您需要的是创建一个新的自定义扩展名,该扩展名扩展文本类型,例如:

<?php

namespace App\Form;

use Symfony\Component\Form\AbstractTypeExtension;
use Symfony\Component\Form\Extension\Core\Type\FormType;
use Symfony\Component\Form\FormInterface;
use Symfony\Component\Form\FormView;
use Symfony\Component\OptionsResolver\OptionsResolver;

class TextTypeExtension extends AbstractTypeExtension
{
    public function buildView(FormView $view, FormInterface $form, array $options)
    {
        $view->vars['format'] = $options['format'];
    }

    public function configureOptions(OptionsResolver $resolver)
    {
        $resolver->setDefaults([
            'format' => null,
        ]);
    }

    public static function getExtendedTypes(): iterable
    {
        return [TextType::class];
    }
}

谢谢,这正是我需要的!谢谢,这正是我需要的!