【问题标题】:Wrong table displayField being baked even though a name getter contained in entity即使实体中包含名称获取器,也会烘焙错误的表 displayField
【发布时间】:2021-12-06 12:48:36
【问题描述】:

这是在我的表中设置的当前displayField

$this->setDisplayField('id');

我需要它:

$this->setDisplayField('name');

但是,我的数据库表有双语字段,例如 name_enname_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_enname_fr

【问题讨论】:

  • 您是否有很多需要烘焙的文件,或者您可以只更改烘焙过程产生的文件吗?
  • 我们有一个用于烘焙的插件,我们烘焙这样的双语网站,因此不幸的是需要假设这种情况经常出现。我可以轻松地调整插件的 table.twig 文件。我只是想知道它是否应该通过虚拟领域抓住它。

标签: php cakephp cakephp-3.0


【解决方案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 %}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-04-21
    • 2015-05-08
    • 2021-07-23
    • 2016-05-03
    • 1970-01-01
    • 2015-12-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多