Php 带有DataTransformer的表单字段默认值
无法设置连接了DataTransformer的表单字段的默认值 让我们从下面的例子: 在本例中,ModelTransformer被添加到“问题”字段中,在呈现表单时将问题对象转换为字符串(问题编号),并在提交表单时将其转换回问题 现在,我通过生成器选项为issue字段设置默认值:Php 带有DataTransformer的表单字段默认值,php,forms,symfony,Php,Forms,Symfony,无法设置连接了DataTransformer的表单字段的默认值 让我们从下面的例子: 在本例中,ModelTransformer被添加到“问题”字段中,在呈现表单时将问题对象转换为字符串(问题编号),并在提交表单时将其转换回问题 现在,我通过生成器选项为issue字段设置默认值: public function buildForm(FormBuilderInterface $builder, array $options) { $issue = $options['issue']; //
public function buildForm(FormBuilderInterface $builder, array $options)
{
$issue = $options['issue']; //$issue contains an Issue Object from the controller
$builder
->add('description', TextareaType::class)
->add('issue', TextType::class, array(
'data' => $issue
))
;
}
呈现表单时,我遇到以下错误:
表单的视图数据应该是AppBundle/Entity/Issue类的实例,但它是一个(n)字符串。您可以通过将“data_class”选项设置为null或添加将(n)字符串转换为AppBundle/Entity/Issue实例的视图转换器来避免此错误
- 转储$issue返回一个issue对象
- 按照建议将data_class选项设置为null将返回相同的错误
- 传递$issue->getId()而不是$issue会导致以下错误:“对整数调用成员函数getId()”
我真的不明白这个错误,希望你能帮助我
IssueSelectorType
(TextType
的子项)需要一个字符串作为初始值,并且内部的数据转换器将其转换为issue实例,因此您需要传递issue id
但是,数据
选项并不始终作为默认值工作:
表单字段的默认值直接取自基础数据结构。数据选项将覆盖此默认值()
有关更多详细信息,请参见此答案:
IssueSelectorType
(TextType的子级)需要一个字符串作为初始值,而内部的数据转换器将此转换为issue实例,因此您需要传递issue id
但是,数据
选项并不始终作为默认值工作:
表单字段的默认值直接取自基础数据结构。数据选项将覆盖此默认值()
有关更多详细信息,请参见此答案:我认为你错了。您似乎希望将对象传递给文本字段,根据定义,文本字段只能将字符串作为参数。“如果您的对象有一个方法_toString(),它可能会工作,但我认为它不符合逻辑。@AlphonseD。”。我也这么认为,但将$issue->getId()而不是$issue作为“数据”值传递会引发另一个异常,即无法对字符串值调用getId(),而在buildForm()函数中转储时它不是字符串,因此我真的很困惑。我认为您错了。您似乎希望将对象传递给文本字段,根据定义,文本字段只能将字符串作为参数。“如果您的对象有一个方法_toString(),它可能会工作,但我认为它不符合逻辑。@AlphonseD。”。我也这么认为,但将$issue->getId()而不是$issue作为“数据”值传递会引发另一个异常,即无法对字符串值调用getId(),而在buildForm()函数中转储时它不是字符串,因此我真的很困惑。这也是我的第一个猜测,即传递问题id,但随后我得到了“调用integer上的成员函数getId()”,因为我的ModelTransformer尝试将其转换为整数。这是否意味着在使用DataTransformer时,为字段设置默认值的唯一方法是通过setData()?我尝试使用您的FormExtension解决方案,但仍然得到与我第一次猜测相同的错误,即传递问题id,但随后我得到“对integer上的成员函数getId()的调用”“因为我的ModelTransformer试图将其转换为整数。这是否意味着在使用DataTransformer时,为字段设置默认值的唯一方法是通过setData()?我尝试使用FormExtension解决方案,但仍然得到相同的错误
public function buildForm(FormBuilderInterface $builder, array $options)
{
$issue = $options['issue']; //$issue contains an Issue Object from the controller
$builder
->add('description', TextareaType::class)
->add('issue', TextType::class, array(
'data' => $issue
))
;
}