【问题标题】:Keep leading 0 in Twig在 Twig 中保持领先 0
【发布时间】:2014-08-06 12:49:45
【问题描述】:

在我的数据库中,我有一个包含以下数据的字段:000010(类型为整数)

在我的 twig tpl 中,我想显示它,然后我这样做:{{ consumption.documentName }}

但浏览器显示“10”。好像 Twig 正在自动对我的数据进行修剪。 我试过 {{ opening.documentName|raw }} 但它不起作用。我在 Google 上找不到任何关于如何使用 Twig 保持领先 0 的信息。

有人知道怎么做吗?

【问题讨论】:

    标签: symfony twig


    【解决方案1】:

    我认为你必须强制格式(因为你的类型是整数)。

    您可以使用格式过滤器:

    {{ "%06d"|format(spending.documentName) }}
    

    或者更好地创建一个树枝扩展(http://symfony.com/doc/current/cookbook/templating/twig_extension.html):

    public function strpad($number, $pad_length, $pad_string) {
        return str_pad($number, $pad_length, $pad_string, STR_PAD_LEFT);
    }
    

    在您的模板中更清晰:

    {{ spending.documentName | strpad(6,'0') }}
    

    【讨论】:

    • 这行得通,但它使我的零领先库存完全无用,因为我必须在显示之前重新格式化它。如果我决定更改数据库中前导零的数量,我也必须编辑我的模板。无论如何,我会坚持下去,现在找不到更好的解决方案。反正这个树枝自动修剪真的很奇怪。
    • 你在 ORM 上使用(比如 Doctrine)吗?如果是这样,我认为是 ORM 进行修剪,而不是树枝
    • 我使用教义。在我的数据库中,该值以前导零正确保存。你认为学说在补水过程中会起到修剪作用?
    • 是的,可能;所以你也可以在学说实体的getDocumentName函数中调用str_pad,但我认为这不是最好的解决方案
    • 是的,我将属性类型从整数更改为字符串:) 可能不是有史以来最好的解决方案,但它确实有效。这个属性实际上是一个字符串是正确的,因为它代表一个文档名称。使用 s 字符串类型,在 db 插入或水合期间,学说不会修剪前导 0。
    【解决方案2】:

    您需要使用format 过滤器。

    由于占位符遵循sprintf() 表示法,您应该能够将PHP 中的sprintf('%06d', $integer); 转换为Twig 中的{{ '%06d'|format($integer) }}

    【讨论】:

      【解决方案3】:

      这里有点晚了,但遇到了同样的情况。

      使用 twig 3.x,您可以使用:

      {{your.number | format_number({min_integer_digit:'2'})}}
      

      【讨论】:

      • 参数 ('2') 不必是字符串。即{{ num|format_number({min_integer_digit: 2}) }} 应该被认为是正确的。
      猜你喜欢
      • 2023-04-04
      • 2020-02-20
      • 2010-10-19
      • 1970-01-01
      • 1970-01-01
      • 2021-04-18
      • 1970-01-01
      • 2021-12-17
      • 2023-03-23
      相关资源
      最近更新 更多