在Twig中保留前导零

29
在我的数据库中,有一个包含以下数据的字段: 000010(类型为整数)。
在我的Twig模板中,我想要显示它,然后我这样做:{{ spending.documentName }}
但是浏览器显示“10”。就像Twig自动对我的数据执行了修剪一样。 我尝试了{{ spending.documentName|raw }},但它不起作用。我在谷歌上找不到关于如何让Twig保留前导零的任何信息。
有人知道如何操作吗?
3个回答

50

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

你可以使用格式过滤器:

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

或者更好的方法是创建一个Twig扩展(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') }}

这个方法可以工作,但是它使得我的零前导存储完全无用,因为我必须在显示之前重新格式化它。如果我决定更改数据库中的前导零数量,我还必须编辑我的模板。不管怎样,我会坚持使用它,目前找不到更好的解决方案。总之,这个Twig自动修剪功能真的很奇怪。 - VaN
2
你使用ORM(比如Doctrine)吗?如果是这样,我认为是ORM进行了trim操作,而不是Twig。 - griotteau
我在我的数据库中使用Doctrine。 值以前导零正确保存。 您认为Doctrine在还原期间执行修剪操作吗? - VaN
是的,可能可以在Doctrine实体的getDocumentName函数中调用str_pad,但我认为这不是最好的解决方案。 - griotteau
你找到解决方法了吗,@VaN?即使使用列定义如options={"unsigned":true}, columnDefinition="SMALLINT(4) UNSIGNED ZEROFILL",是Doctrine确实修剪零吗? - webDEVILopers
2
是的,我把我的属性类型从整数改成了字符串:) 可能不是最好的解决方案,但它能起作用。而且对于这个属性来说,它实际上应该是一个字符串,因为它表示一个文档名称。使用字符串类型,Doctrine 在数据库插入和转换过程中不会去掉前导 0。 - VaN

10
你需要使用 format 过滤器。
由于占位符遵循 sprintf() 的表示法,你应该能够将 PHP 中的 sprintf('%06d', $integer); 转换为 Twig 中的 {{ '%06d'|format($integer) }}

8

虽然有点晚了,但我也遇到了同样的问题。

在twig 3.x中,您可以使用以下内容:

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

参数('2')不必是字符串。即 {{ num|format_number({min_integer_digit: 2}) }} 应被视为正确的。 - Quolonel Questions

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接