Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/278.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 带有DataTransformer的表单字段默认值_Php_Forms_Symfony - Fatal编程技术网

Php 带有DataTransformer的表单字段默认值

Php 带有DataTransformer的表单字段默认值,php,forms,symfony,Php,Forms,Symfony,无法设置连接了DataTransformer的表单字段的默认值 让我们从下面的例子: 在本例中,ModelTransformer被添加到“问题”字段中,在呈现表单时将问题对象转换为字符串(问题编号),并在提交表单时将其转换回问题 现在,我通过生成器选项为issue字段设置默认值: public function buildForm(FormBuilderInterface $builder, array $options) { $issue = $options['issue']; //

无法设置连接了DataTransformer的表单字段的默认值

让我们从下面的例子:

在本例中,ModelTransformer被添加到“问题”字段中,在呈现表单时将问题对象转换为字符串(问题编号),并在提交表单时将其转换回问题

现在,我通过生成器选项为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
        ))
    ;
}