Php 如何向Symfony表单字段添加选项?
我对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
//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];
}
}
谢谢,这正是我需要的!谢谢,这正是我需要的!