【问题标题】:Why doesn't eval null not work in the TCA为什么 eval null 在 TCA 中不起作用
【发布时间】:2013-08-07 08:32:47
【问题描述】:

我有一个这样定义的字段:

max_items int(11) NULL

如果您在后端将此字段留空,我希望它存储 NULL。

为此,我在 TCA 中使用此配置,但不起作用:

'max_items' => array(
    'exclude' => 0,
    'label' => '...',
    'config' => array(
        'type' => 'input',
        'eval' => 'null',
    ),
),

编辑: 它不存储预期值NULL,而是存储0。 我试过max_items int(11) DEFAULT NULL,但还是不行。

编辑2: 谢谢新鲜! 我最终编写了自己的 eval 函数:

<?php
class tx_myextension_evalfunc {
    function evaluateFieldValue($sValue, $aIsIn, &$bSet)
    {
        return ($sValue === '') ? null : $sValue;
    }
}
?>

使用此配置:

'max_items' => array(
    'exclude' => 0,
    'label' => '...',
    'config' => array(
        'type' => 'input',
        'eval' => 'tx_myextension_evalfunc',
    ),
),

【问题讨论】:

  • 对不起,“但它不起作用”不是很有帮助。你有错误吗?数据库中实际存储了什么?这是您领域的全部配置还是您遗漏了什么?
  • 您应该在数据库字段中使用“max_items int(11) DEFAULT NULL”。
  • 感谢 cmets,我编辑了问题。
  • 你问题的第二部分是问题的一部分还是答案?

标签: typo3 extbase typo3-6.1.x


【解决方案1】:

旧 TYPO3 版本中存在错误:

TYPO3 后端的当前实现不允许存储 NULL 值,只允许空字符串或零作为数字。

此错误是 TYPO3 6.0 及更高版本中的 fixed。在 TCA 配置中有一个新的 eval 选项“null”:

'config' = array(
  'type' => 'input',
  'eval' => 'null',
  ...
);

如果启用此选项,输入右侧会出现一个复选框。如果取消激活,则将NULL值保存到数据库中,如果激活,则可以输入一个整数值。

如果您想禁用每个默认复选框以将 Null 存储为默认值,请将 'default' => null 添加到其中:

'config' = array(
  'type' => 'input',
  'eval' => 'null',
  'default' => null,
);

在 TYPO3 8 LTS 中测试。然后它看起来像这样:


原答案:

有两个有趣的链接供您参考:

【讨论】:

    猜你喜欢
    • 2020-01-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-12-16
    • 2013-02-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多