即使实体中包含名称获取器,也会烘焙错误的表 displayField
Posted
技术标签:
【中文标题】即使实体中包含名称获取器,也会烘焙错误的表 displayField【英文标题】:Wrong table displayField being baked even though a name getter contained in entity 【发布时间】:2021-12-06 12:48:36 【问题描述】:这是在我的表中设置的当前displayField
:
$this->setDisplayField('id');
我需要它:
$this->setDisplayField('name');
但是,我的数据库表有双语字段,例如 name_en
和 name_fr
,我使用 getter 在实体中填充 name
:
protected $_virtual = ['name'];
protected function _getName()
if (Configure::read('wetkit.lang') == 'fr')
return $this->_properties['name_fr'];
else
return $this->_properties['name_en'];
实体中带有虚拟字段的烘焙表是否应该在烘焙期间将 displayField 设置为 name?
也许在 table bake 过程中 getter 不可用以确定 displayField 并默认为id
?
我是否必须修改 table.twig
文件以相应地输出,这取决于我的结构具有 name_en
和 name_fr
?
【问题讨论】:
您是否有很多需要烘焙的文件,或者您可以只更改烘焙过程产生的文件吗? 我们有一个用于烘焙的插件,我们烘焙这样的双语网站,因此不幸的是需要假设这种情况经常出现。我可以轻松地调整插件的 table.twig 文件。我只是想知道它是否应该通过虚拟领域抓住它。 【参考方案1】:最终修改了table.twig
文件:
%- set setBilingualDisplayField = false %
%- for bf in bilingualFields %
%- if bf.name == 'name' %
%- set setBilingualDisplayField = true %
%- endif %
%- endfor %
% if setBilingualDisplayField %
$this->setDisplayField('name');
% else %
$this->setDisplayField(' displayField ');
% endif %
【讨论】:
以上是关于即使实体中包含名称获取器,也会烘焙错误的表 displayField的主要内容,如果未能解决你的问题,请参考以下文章
错误“缓存可能已过期,请尝试 `force_reload=True`。”即使我在代码块中包含了 `force_reload=True` 也会出现?