Php 如何避免从symfony表单回写数据?

Php 如何避免从symfony表单回写数据?,php,forms,symfony,Php,Forms,Symfony,我想创建只读隐藏字段。现在我有一个字段,看起来像这样: $builder ->add('question_category_id', HiddenType::class); 实体拥有以下方法: public function getQuestionCategoryId() { return $this->getQuestion()->getQuestionCategory()->getId(); } 保存后,我出现以下错误: 属性“questi

我想创建只读隐藏字段。现在我有一个字段,看起来像这样:

$builder
        ->add('question_category_id', HiddenType::class);
实体拥有以下方法:

public function getQuestionCategoryId() {
    return $this->getQuestion()->getQuestionCategory()->getId();
}
保存后,我出现以下错误:

属性“question\u category\u id”或方法“addQuestionCategoryId()”/“removeQuestionCategoryId()”、“setQuestionCategoryId()”、“questionCategoryId()”、“\uuuuu set()”或“\uuuu call()”都不存在,并且在类“Entity\UnitQuestionAnswer”中具有公共访问权限

我可以添加虚拟方法

public function setQuestionCategoryId($id) {
    return $this;
}
但这不是正确的方式


如何创建只读隐藏字段,或避免将数据从实体中写回?

S2.8有一个只读属性,它可以执行您想要的操作,但在3.0中已被删除

禁用的属性应该可以工作。请注意,该值本身实际上不会被提交到symfony.com/doc/current/reference/forms/types/…因此,如果您对发布的数据做了任何令人生畏的事情,那么这可能是一个问题

我想可能会玩弄内部构件,但这会带来更多的麻烦


就我个人而言,考虑到我的get方法只是为表单添加的,我只需添加一个相应的set方法,然后继续。

你想用只读隐藏字段做什么?@JaredFarrish,在模板中按类别排列问题。@VincenOpeTrucci可能重复,使用mapped false时,它不会从实体中读取数据。@sectus:从文档中“如果您希望在读取或写入对象时忽略该字段,可以将mapped选项设置为false。”。您还可以尝试将“允许额外字段”选项添加到form@RyanVincent,是的,客户端可以更改禁用的字段值,但禁用的值不会发送回服务器。并且该值将仅用于使用自定义模板对表单进行可视化。@sectus-请注意,用户可以取消禁用该值并发布该值,这将触发set not found消息。如果客户机实际上不需要该值,则不要发送它。细枝模板可以从数据对象中提取它。